JQuery选择器:使用文档,正文和引号不一致

Ale*_*x_B 4 jquery selector

基本选择器的形式如下:

jQuery( element )
jQuery( selector [, context ] )
Run Code Online (Sandbox Code Playgroud)

如果引用HTML元素可以正常工作:

$("div").length    // value is 2
$("body").length   // value is 1
$(body).length     // Uncaught ReferenceError: body is not defined 
Run Code Online (Sandbox Code Playgroud)

然而,文档和document.body都没有引号:

$(document).length         // value is 1
$(document.body).length    // value is 1
$("document").length       // value is 0
$("document.body").length  // value is 0
Run Code Online (Sandbox Code Playgroud)

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

问题2:为什么document和document.body失败并带引号?

我理解"文档"不是HTML元素<body>,可能是一个特例.这引出了我的最后一个问题.

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

$(document.body.div).length         // value is 0
$("document.body.div").length       // value is 0
Run Code Online (Sandbox Code Playgroud)

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

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

Dav*_*vid 10

document不是DOM中的元素.这 DOM.并且JavaScript在范围内有一个对象可供使用.所以这个选择器:

$(document)
Run Code Online (Sandbox Code Playgroud)

正在引用该对象,将其包装在jQuery函数中以基于原始对象创建jQuery对象.同样的事情发生了很多.例如,您可以这样做:

var someElement = document.getElementById('someId');
Run Code Online (Sandbox Code Playgroud)

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

$(someElement)
Run Code Online (Sandbox Code Playgroud)

另外,document.body因为bodydocument对象的属性而起作用.此对象及其属性作为整体引擎的一部分存在于纯JavaScript中,并且不是jQuery的一部分.

在另一方面,$("document")不工作,因为它告诉了jQuery找出一个HTML元素称为 "文档" 里面的DOM.就像是:

<document>some text</document>
Run Code Online (Sandbox Code Playgroud)

当然,这不存在.这也不是:

$("document.body")
Run Code Online (Sandbox Code Playgroud)

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

<document class="body">some text</document>
Run Code Online (Sandbox Code Playgroud)

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

您的第一个示例仅使用存在的JavaScript对象.你的第二个例子是使用jQuery选择器,它们试图在DOM中找到不存在的元素.他们非常不同.