创建jQuery对象的问题

时间:2012-08-21 08:20:43

标签: javascript jquery html special-characters

当我这样做时

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

我得到了jQuery对象。但是,如果我这样做:

var bar = $(' ');
console.log(bar);

然后我在Firefox中收到“语法错误,无法识别的表达式:”错误消息。

为什么?

3 个答案:

答案 0 :(得分:1)

这是因为jQuery对象假设是dom元素的包装器。如果你传递'&nbsp'那么它就不能创建一些dom元素,所以它会抛出错误。但是,没有标记n$('n').length0。所以我认为它是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 );
};

虽然'&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选择器。

答案 2 :(得分:0)

简短的回答是jQuery使用sizzle selector engine,该引擎不知道如何处理&nbsp;