当我这样做时
var foo = $('n');
console.log(foo);
我得到了jQuery对象。但是,如果我这样做:
var bar = $(' ');
console.log(bar);
然后我在Firefox中收到“语法错误,无法识别的表达式:”错误消息。
为什么?
答案 0 :(得分:1)
这是因为jQuery对象假设是dom元素的包装器。如果你传递' '
那么它就不能创建一些dom元素,所以它会抛出错误。但是,没有标记n
和$('n').length
给0
。所以我认为它是jQuery问题中的解析器。
答案 1 :(得分:1)
如果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选择器。
答案 2 :(得分:0)
简短的回答是jQuery使用sizzle selector engine,该引擎不知道如何处理
。