我用jQuery 1.2.6已经使用了这一行代码几年了。
$("#acListTemp div.amenitiesDiv label").before(",");
我刚刚升级到jQuery 1.6.1,现在它给了我这个错误:
语法错误,无法识别的表达式:
,
我也尝试了这个,但它产生了同样的错误:
theChar = ",";
$("#acListTemp div.amenitiesDiv label").before(theChar);
我检查了jQuery API页面中的before命令,但我仍然难过。任何帮助是极大的赞赏!
如果你正在使用 .insertBefore()
代替 .before()
,你会得到那个错误。
使用时不会出现错误 insertBefore()
在jQuery 1.2.6中
看起来错误来自Sizzle:
https://github.com/jquery/sizzle/blob/master/sizzle.js#L325-327
Sizzle.error = function( msg ) {
throw "Syntax error, unrecognized expression: " + msg;
};
...所以我猜你正在使用的代码中的某个地方 ","
作为选择者,也许在 insertBefore()
或者其他需要选择器的方法。
编辑:
从下面的评论中,已确定jQuery确实如此 不 在呼叫时按预期静默失败 .before()
针对没有为其选择器找到匹配项的jQuery对象。
对我来说似乎是一个错误,但我确信jQuery的人会想出为什么这是理想的行为。
你可以在这里看到问题: https://github.com/jquery/jquery/blob/1.6.1/src/manipulation.js#L130-140
before: function() {
if ( this[0] && this[0].parentNode ) {
return this.domManip(arguments, false, function( elem ) {
this.parentNode.insertBefore( elem, this );
});
} else if ( arguments.length ) {
var set = jQuery(arguments[0]);
set.push.apply( set, this.toArray() );
return this.pushStack( set, "before", arguments );
}
},
如您所见,只有2个测试。
var set = jQuery(arguments[0]);
所以如果你想插入一个 ","
,但你的选择器没有找到任何匹配,jQuery将最终做:
var set = jQuery(",");
...这是Sizzle处理的无效表达式。