语法错误,无法识别的表情: '.D img.displayImage'

问题描述:

这是我的HTML:语法错误,无法识别的表情: '.D img.displayImage'

<div class="flex-item a"> 
    <p>A</p> 
    <img class="displayImage" src="img/image-placeholder.svg" /> 
    <textarea class="textInput"></textarea> 
</div> 

<div class="flex-item b"> 
    <p>B</p>   
    <img class="displayImage" src="img/image-placeholder.svg" /> 
    <textarea class="textInput"></textarea> 
</div> 

<div class="flex-item c"> 
    <p>C</p>   
    <img class="displayImage" src="img/image-placeholder.svg" /> 
    <textarea class="textInput"></textarea> 
</div> 

<div class="flex-item d"> 
    <p>D</p>   
    <img class="displayImage" src="img/image-placeholder.svg" /> 
    <textarea class="textInput"></textarea> 
</div> 

这是我的JS:

var arr = ["a", "b", "c", "d"]; 
var imageAreaArray = []; 

$.each(arr, function(i, val){ 
    imageAreaArray.push("document.querySelector('." + val + " img.displayImage')"); 
});  

$.each(imageAreaArray, function(i, val){ 
    var contentVal = $("'." + arr[i] + "img.displayImage'").closest('textarea'); 
    imagePath = $("'." + arr[i] + " img.displayImage'").src; 
}); 

这应该采取就近<textarea>的价值在所选的'<div>'中的img.displayImage,并且还采用img.displayImagesrc,但出现以下错误,我不确定如何解决。

Uncaught Error: Syntax error, unrecognized expression: '.d img.displayImage'

UPDATE

不再收到错误消息,但现在contentValimagePath被显示为未定义。任何想法为什么undefined可能会显示?

+1

你能解释一下你准备做什么,因为我可以保证你有更好的办法。 –

+0

我不知道我是否可以调用这种意大利面代码,但它是某种意大利面,并不是一种好的方法。 –

+0

@RoryMcCrossan:我试图将图像和文本上传到API,但现在我不再获取

你有jQuery选择额外的单引号,这是取值为无效选择像$("'.a .. ..'")

$.each(imageAreaArray, function(i, val){ 
    var contentVal = $("'." + arr[i] + "img.displayImage'").closest('textarea'); 
    //     ^^ 
    imagePath = $("'." + arr[i] + " img.displayImage'").src; 
    //   ^^ 
}); 
  1. 此外$(..).src将输出不确定。请使用$(..)[0].src$(..).prop('src')来获取源代码。
  2. .closest('..')返回最接近的父元素。 <textarea>这里是img的兄弟姐妹。使用.next('textarea')而不是.closest()

我看到了代码中的两个潜在问题。首先,我不相信jQuery选择器需要用单引号包装,所以摆脱这些。其次,当查询最近的textarea时,你错过了arr [i]和img.displayImage之间的空格。

我建议缓存的jQuery选定的元素:

var element = $(`.${arr[i]} img.displayImage`); 
var contentVal = element.closest('textarea'); 
imagePath = element.src; 

注意,`字符是backticks,通常在发现左上角英语键盘。此语法要求您定位的浏览器支持ES6字符串插值。作为替代,您可以使用您当前使用的相同方法构建选择器。

var element = $("'." + arr[i] + " img.displayImage'"); 
... 
+0

谢谢@jjbandit。该错误不再显示,但'var element'显示为未定义。有任何想法为什么这可能会发生? –

+0

没有代码示例我很不确定。 – jjbandit