When I do
var foo = $('n');
console.log(foo);
I get jQuery object. However if I do:
var bar = $(' ');
console.log(bar);
then I get "Syntax error, unrecognized expression: " error message in Firefox.
Why?
When I do
var foo = $('n');
console.log(foo);
I get jQuery object. However if I do:
var bar = $(' ');
console.log(bar);
then I get "Syntax error, unrecognized expression: " error message in Firefox.
Why?
如果 jQuery 对象的参数是字符串,则它必须是有效的 CSS 选择器或一些可检测的 HTML 标记。由于它不是可检测的 HTML 标记(字符串中没有被<
and包围的 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 选择器。
那是因为 jQuery 对象假设是 dom 元素的包装器。如果你通过' '
了,那么它就不能创建一些 dom 元素,所以它会抛出错误。但是没有标签n
和$('n').length
给0
。所以我认为它是 jQuery 问题中的解析器。
简短的回答是 jQuery 使用sizzle 选择器引擎,而该引擎不知道如何处理
.