首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建jQuery对象时出现问题

问创建jQuery对象时出现问题
EN

Stack Overflow用户
提问于 2012-08-21 16:20:43
回答 3查看 157关注 0票数 0

当我这样做的时候

代码语言:javascript
复制
var foo = $('n');
console.log(foo);

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

代码语言:javascript
复制
var bar = $(' ');
console.log(bar);

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

为什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-21 16:35:52

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

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

代码语言:javascript
复制
Sizzle.error = function( msg ) {
    throw new Error( "Syntax error, unrecognized expression: " + msg );
};

尽管'&nbsp;'是一个有效的HTML片段,但jQuery必须能够判断您正在尝试传递的是一个CSS选择器还是一些HTML标记。为此,它在HTML标记的典型位置查找开始和结束标记字符<和>,以便区分HTML和CSS选择器。在您的例子中,您没有通过测试,因此它会尝试将您的字符串作为CSS选择器来处理(实际上并不是),所以它会失败。

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

代码语言:javascript
复制
var bar = $('<span>&nbsp;</span>');

这样做的原因是:

代码语言:javascript
复制
var foo = $('n');
console.log(foo);

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

票数 1
EN

Stack Overflow用户

发布于 2012-08-21 16:24:04

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

票数 1
EN

Stack Overflow用户

发布于 2012-08-21 16:25:51

简而言之,jQuery使用sizzle selector engine,而该引擎不知道如何处理&nbsp;。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12050782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档