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

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

在我的HTML中,我有:

<div id="2013-10-23">
    <h1>5</h1>
    <p>eeeeeeeeeeee</p>
</div>
在上面的代码中,我有一个 <div>,其 id2013-10-23,当获取该 id 时,会抛出语法错误。
Uncaught Error: Syntax error, unrecognized expression: "#2013-10-23"
9个回答

44

尝试

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

你的解决方案把双引号作为字符串的一部分传递了。


19

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

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 */ }

8

如果您尝试使用一个缺失"]"的选择器,比如说,在Safari浏览器中也会出现这种情况。

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

有趣的是,在Chrome浏览器中,这个缺少一个括号的jQuery选择器仍然能够正常工作。


7

尝试使用:

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

这将去除你使用的额外引号。

6
尝试这个(ES5)
console.log($("#" +  d));

ES6

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

4

我不得不花更多时间寻找解决办法,但最终是找到了错误的位置才解决了问题。这里有一个Jquery的错误转储示例,可以帮助我们找到错误。

在我的情况下,id为空,导致代码`$("#" + id);`出现了错误。

问题出在我没有看到的地方,这有助于锁定问题所在,以便进行故障排除并修复它。


1
谢谢您的回复。这确实帮助我们了解JQUERY错误消息的结构如何指向特定的问题位置。确实 - 这就是我遇到的错误 - 当我尝试连接AJAX值时,我错过了一个# id,即$("#"+Data_G).serialize()。 - TV-C-1-5

0

我有一个带空格的选择器('#test .test')。

我的错误示例:

var href = "javascript:scrollto('"+key+"')";

对我有帮助的是:encodeURIComponent(value)

var href = "javascript:scrollto('"+encodeURIComponent(key)+"')";

0
如果您正在使用jQuery 2.1.4或更高版本,请尝试以下操作:
$("#" + this.d);

或者,您可以在使用之前定义变量。这样可以使您的代码更简单。

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

0

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

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

查看此答案以获取更多详细信息: HTML中id属性的有效值是什么?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接