0

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?

4

3 回答 3

1

如果 jQuery 对象的参数是字符串,则它必须是有效的 CSS 选择器或一些可检测的 HTML 标记。由于它不是可检测的 HTML 标记(字符串中没有被<and包围的 HTML 标记>),因此它会尝试将字符串作为 CSS 选择器处理。

但是 jQuery 内部的 Sizzle 选择器引擎发现它在无效的 CSS 选择器中并抛出异常。您可以在 jQuery 中看到被触发的这段代码:

Sizzle.error = function( msg ) {
    throw new Error( "Syntax error, unrecognized expression: " + msg );
};

虽然'&nbsp;'是一个有效的 HTML 片段,但 jQuery 必须能够判断您是在尝试传递 CSS 选择器还是一些 HTML 标记。为此,它会查找打开和关闭标记字符<,并>在典型位置查找 HTML 标记,以区分 HTML 和 CSS 选择器。在您的情况下,您未通过该测试,因此它尝试将您的字符串作为 CSS 选择器(它不是)处理,因此它失败了。

您需要将有效参数传递给 jQuery。如果你想传递一些 HTML 给它,你可以这样做:

var bar = $('<span>&nbsp;</span>');

这样做的原因:

var foo = $('n');
console.log(foo);

'n'是一个有效的 CSS 选择器。除非您的文档中有标签,否则它可能不会匹配您文档中的任何<n>内容,但它是一个有效的 CSS 选择器。

于 2012-08-21T08:35:52.293 回答
1

那是因为 jQuery 对象假设是 dom 元素的包装器。如果你通过'&nbsp'了,那么它就不能创建一些 dom 元素,所以它会抛出错误。但是没有标签n$('n').length0。所以我认为它是 jQuery 问题中的解析器。

于 2012-08-21T08:24:03.550 回答
0

简短的回答是 jQuery 使用sizzle 选择器引擎,而该引擎不知道如何处理&nbsp;.

于 2012-08-21T08:25:50.790 回答