当我这样做的时候
var foo = $('n');
console.log(foo);我得到了jQuery对象。但是,如果我这样做了:
var bar = $(' ');
console.log(bar);然后我在Firefox中得到“语法错误,无法识别的表达式:”错误消息。
为什么?
发布于 2012-08-21 16:35:52
如果jQuery对象的参数是字符串,则它必须是有效的CSS选择器或某些可检测的HTML标记。因为它不是可检测的HTML标签(字符串中没有被<和>包围的HTML标签),所以它会尝试将该字符串作为一个CSS选择器处理。
但是jQuery内部的Sizzle选择器引擎发现它在无效的CSS选择器中,并抛出一个异常。您可以在jQuery中看到正在被触发的代码:
Sizzle.error = function( msg ) {
throw new Error( "Syntax error, unrecognized expression: " + msg );
};尽管' '是一个有效的HTML片段,但jQuery必须能够判断您正在尝试传递的是一个CSS选择器还是一些HTML标记。为此,它在HTML标记的典型位置查找开始和结束标记字符<和>,以便区分HTML和CSS选择器。在您的例子中,您没有通过测试,因此它会尝试将您的字符串作为CSS选择器来处理(实际上并不是),所以它会失败。
您需要将有效参数传递给jQuery。如果你想传递一些HTML给它,你可以这样做:
var bar = $('<span> </span>');这样做的原因是:
var foo = $('n');
console.log(foo);'n'是一个有效的CSS选择器。除非文档中有<n>标记,否则它可能不会与文档中的任何内容匹配,但它是一个有效的CSS选择器。
发布于 2012-08-21 16:24:04
这是因为jQuery对象被假定为dom元素的包装器。如果你传递了' ',那么它就不能创建一些dom元素,所以它抛出错误。但是,没有标签n和$('n').length给0。所以我认为它是jQuery问题中的解析器。
发布于 2012-08-21 16:25:51
简而言之,jQuery使用sizzle selector engine,而该引擎不知道如何处理 。
https://stackoverflow.com/questions/12050782
复制相似问题