jQuery:未捕获的错误:语法错误,无法识别的表达式

Posted

技术标签:

【中文标题】jQuery:未捕获的错误:语法错误,无法识别的表达式【英文标题】:jQuery: Uncaught Error: Syntax error, unrecognized expression 【发布时间】:2013-10-10 03:55:22 【问题描述】:
console.log($('"#'+d+'"'));

在我的 html 中,我有:

<div id="2013-10-23">
    <h1>5</h1>
    <p>eeeeeeeeeeee</p>
</div>

在上面的代码中,我有一个&lt;div&gt;2013-10-23id,当得到id 时,它会抛出这个语法错误:

Uncaught Error: Syntax error, unrecognized expression: "#2013-10-23"

【问题讨论】:

【参考方案1】:

试试

console.log($("#"+d));

您的解决方案是将双引号作为字符串的一部分传递。

【讨论】:

【参考方案2】:

不需要“双引号”+“单引号”组合

console.log( $('#'+d) ); // single quotes only
console.log( $("#"+d) ); // double quotes only

你的选择器结果是这样的,这对引号来说有点过分了:

$('"#abc"') // -> it'll try to find  <div id='"#abc"'>

// In css, this would be the equivalent:
"#abc" /* Wrong */  // instead of:
#abc /* Right */ 

【讨论】:

【参考方案3】:

如果您尝试使用缺少 ] 的选择器,也可能在 safari 中发生这种情况,例如

$('select[name="something"')

但有趣的是,这个缺少括号的相同 jquery 选择器可以在 chrome 中使用。

【讨论】:

【参考方案4】:

尝试使用:

console.log($("#"+d));

这将删除您使用的额外引号。

【讨论】:

【参考方案5】:

试试这个(ES5)

console.log($("#" +  d));

ES6

console.log($(`#$d`));

【讨论】:

【参考方案6】:

我不得不多看一点才能解决我的问题,但解决问题的方法是找到错误所在。 Here 它在 Jquery 的错误转储中展示了如何做到这一点。

在我的情况下,id 是空的,$("#" + id);;产生错误。

这是我没有寻找的地方,因此有助于查明它的位置,以便我可以进行故障排除和修复。

【讨论】:

谢谢你。它确实有助于我们理解 JQUERY 错误消息的结构如何指向特定的问题位置。确实 - 这是我遇到的错误 - 我在尝试连接 AJAX 的值时缺少 # id,即 $("#"+Data_G).serialize()【参考方案7】:

如果您使用的是 jQuery 2.1.4 或更高版本,请尝试以下操作:

$("#" + this.d);

或者,您可以在使用之前定义 var。它使您的代码更简单。

var d = this.d
$("#" + d);

【讨论】:

【参考方案8】:

对于一些来到这里的人,您的id 属性中可能有一个特殊字符,因此 jQuery 无法正确读取它。

ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,并且可以是 后跟任意数量的字母、数字 ([0-9])、连字符 ("-")、 下划线(“_”)、冒号(“:”)和句点(“.”)。

查看此答案以获取更多详细信息: What are valid values for the id attribute in HTML?

【讨论】:

以上是关于jQuery:未捕获的错误:语法错误,无法识别的表达式的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 jQuery tablesorter 中的“未捕获的异常:语法错误,无法识别的表达式”?

未捕获的错误:语法错误,无法识别的表达式:不支持的伪:[重复]

未捕获的错误:语法错误,无法识别的表达式:select:[id * =“devices_0_command”] [关闭]

jQuery JSON 错误:语法错误,无法识别的表达式

jQuery 语法错误,无法识别的表达式:[name=Basics.Gender]

jQuery多维数组名称选择器