Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery $(document.body)和$(';body';)之间的差异_Jquery_Document_Document Body - Fatal编程技术网

Jquery $(document.body)和$(';body';)之间的差异

Jquery $(document.body)和$(';body';)之间的差异,jquery,document,document-body,Jquery,Document,Document Body,我是一名jQuery初学者,在浏览一些代码示例时,我发现: $(document.body)和$('body') 这两者之间有什么区别吗?应该没有区别,也许第一个性能更好一些,但我认为它很简单(你真的不应该担心这个) 使用这两种方法,您将标记包装在jQuery对象中$(document.body)使用全局引用文档获取对主体的引用,而$('body')是一个选择器,jQuery将在其中获取对文档上的元素的引用 我看不出有什么大的区别,从一个元素到另一个元素没有任何明显的性能提升。它们指的是同一个元

我是一名jQuery初学者,在浏览一些代码示例时,我发现:

$(document.body)
$('body')


这两者之间有什么区别吗?

应该没有区别,也许第一个性能更好一些,但我认为它很简单(你真的不应该担心这个)

使用这两种方法,您将
标记包装在jQuery对象中
$(document.body)
使用全局引用
文档
获取对
主体的引用,而
$('body')
是一个选择器,jQuery将在其中获取对
文档
上的
元素的引用


我看不出有什么大的区别,从一个元素到另一个元素没有任何明显的性能提升。

它们指的是同一个元素,区别在于当你说
document.body
时,你直接将元素传递给jQuery。或者,当您传递字符串
“body”
时,必须解释该字符串以确定它引用的元素

实际上,两者都能完成任务


如果您感兴趣,文档中有关于的更多信息。

输出方面两者都是等效的。尽管第二个表达式从DOM根进行自顶向下的查找。如果您手头已经有document.body对象供JQuery包装,那么您可能希望避免额外的开销(无论多么小)。
参见

这里的答案实际上并不完全正确。很接近,但有一个边缘案例

区别在于$('body')实际上是通过标记名选择元素,而document.body引用文档上的直接对象

这意味着,如果您(或恶意脚本)覆盖document.body元素($body!),则$('body')仍将有效,但$(document.body)将无效。所以从定义上讲,它们是不等价的


我冒昧地猜测,还有其他边缘情况(例如IE中的全局id元素)也会触发文档对象上覆盖的body元素,同样的情况也会发生。

在浏览器中测试时,我发现时间上有很大的差异

我使用了以下脚本:

警告:运行此操作将使浏览器冻结一点,甚至可能使其崩溃。

var n=10000000,i;
i=n;
控制台时间(“选择器”);
而(i-->0){
$(“正文”);
}
console.timeEnd(“选择器”);
i=n;
控制台。时间(“元素”);
而(i-->0){
$(document.body);
}
console.timeEnd('element')

一个更快,但是考虑到在单个页面上调用次数不会超过几次,两者之间的差异非常小。
$(正文)
不适用于
。on('click'…
事件,而
$(document.body)
$(document)
这两种方法都有效。上面的说法是错误的,而且在性能上也有微小的差异,大约10%的人支持$(document.body)。您可以在这里查看比较
$(document.body)
的速度要快得多:第一个语句并不完全正确。它们可能引用同一个元素。通常是偶数。但不总是:)。请看下面我的答案。你只为“箭头符号”投了一票,你这个厚颜无耻的家伙!我在某个地方读到过这篇文章,我想马上使用它。是的,但是——你真的要这么做1000万次吗?为什么不在重要的地方进行这种分析呢?@scrayne那些性能测试不是关于真实的用例。对这样的元素执行1000万次操作是非常罕见的。但是OP想知道两者的区别,我注意到有一个性能上的差异,所以我想这是值得注意的。这种对琐碎操作性能的强烈关注在今年是有害的。在更高的抽象级别(例如,更好的算法、用户体验错觉)上实现了实际的、可观的性能提升——而不是语法。我认为不可能将
文档设置为
:现在就可以解决。曾经有一段时间,FF和IE会让你这么做,和/或会被id为“body”的物品弄糊涂(我遇到的错误是一位客户在整形外科医生的网站上使用我们的脚本,并在上面贴上了id为“body”的图片)。希望不再是问题:)