首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JQuery选择器:使用不一致的文档、正文和引号

问JQuery选择器:使用不一致的文档、正文和引号
EN

Stack Overflow用户
提问于 2014-01-03 16:21:13
回答 3查看 2.2K关注 0票数 5

基本选择器的形式如下:

代码语言:javascript
复制
jQuery( element )
jQuery( selector [, context ] )

如果引用的话,HTML元素可以很好地工作:

代码语言:javascript
复制
$("div").length    // value is 2
$("body").length   // value is 1
$(body).length     // Uncaught ReferenceError: body is not defined 

然而,document和document.body都是不带引号的:

代码语言:javascript
复制
$(document).length         // value is 1
$(document.body).length    // value is 1
$("document").length       // value is 0
$("document.body").length  // value is 0

问题1:有没有其他没有引号的jQuery元素/选择器?

问题2:为什么document和document.body不能用引号?

据我所知,“文档”不是像<body>这样的HTML元素,可能是一个特例。这就引出了我最后一个问题。

问题3:为什么document.body工作,但下面的返回长度为0?

代码语言:javascript
复制
$(document.body.div).length         // value is 0
$("document.body.div").length       // value is 0

jQuery选择器语法:http://api.jquery.com/jQuery/#jQuery-elementArray

CSS 3选择器:http://www.w3.org/TR/css3-selectors/#type-selectors

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-03 16:27:49

document不是DOM中的一个元素。是多姆。JavaScript的作用域中有一个对象,可以随时使用。所以这个选择器:

代码语言:javascript
复制
$(document)

引用该对象,将其包装在jQuery函数中,以便根据原始对象创建jQuery对象。同样的事情也经常发生。例如,您可以这样做:

代码语言:javascript
复制
var someElement = document.getElementById('someId');

现在someElement是一个对象。(这恰好是指DOM中的HTML元素,但这并不重要。)它可以包装为一个jQuery对象:

代码语言:javascript
复制
$(someElement)

此外,document.body之所以工作,是因为body是document对象上的一个属性。这个对象及其属性作为引擎的一部分存在于普通的JavaScript中,而不是jQuery的一部分。

另一方面,$("document")不能工作,因为它告诉jQuery在DOM中找到一个名为"document“的HTML元素。类似于:

代码语言:javascript
复制
<document>some text</document>

很自然,这根本不存在。这一点也不是:

代码语言:javascript
复制
$("document.body")

因为,同样,这是使用jQuery选择器而不是现有对象。这个选择器再次查找一个名为"document“的元素,特别是一个名为”class“的元素,如下所示:

代码语言:javascript
复制
<document class="body">some text</document>

它不存在,因此选择器找不到这样的元素。

您的第一个示例只是使用存在的JavaScript对象。第二个例子是使用jQuery选择器,它试图在DOM中查找不存在的元素。他们很不一样。

票数 11
EN

Stack Overflow用户

发布于 2014-01-03 16:26:28

  1. 当您使用$(body)时,它尝试访问一个名为body的变量,但是它没有在任何地方声明,因此它引发了一个引用错误。但是document是在全局范围中声明的变量,它引用当前的文档对象,这就是它工作的原因。document.body是document对象的一个属性,因此它也可以工作。
  2. 当您使用'document'或'document.body'时,它会将其视为元素选择器,并在dom中查找<document>之类的元素,这些元素将不会被找到。
  3. document.body.div返回未定义的结果,因此$(document.body.div)不会返回任何结果。
票数 1
EN

Stack Overflow用户

发布于 2014-01-03 16:27:28

  1. 您可以将DOM对象传递给jQuery选择器,没有问题。document是页面上所有DOM对象的根节点。
  2. 页面上没有名为"document“的元素,因此引用它作为选择器失败。
  3. 虽然document有一个属性body,但是document.body没有属性div,因此第一个(未引用)版本会失败。第二个版本(引用)失败的原因与“文档”本身失败的原因相同。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20908101

复制
相关文章

相似问题

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