$(document.body)和$('body')JQuery之间的区别

时间:2012-09-06 19:33:21

标签: jquery

我是一名JQuery初学者,在查找一些代码中的一些示例时。

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

有人能告诉我这两者有什么不同吗?

6 个答案:

答案 0 :(得分:67)

它们引用相同的元素,不同之处在于,当您说document.body时,您将元素直接传递给jQuery。或者,当您传递字符串'body'时,jQuery selector engine必须解释字符串以确定它引用的元素。

在实践中,要么完成任务。

如果您有兴趣,jQuery function的文档中会提供更多信息。

答案 1 :(得分:14)

这里的答案实际上并非完全正确。关闭,但有一个边缘案例。

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

这意味着如果你(或流氓脚本)覆盖了document.body元素(羞耻!)$('body')仍然可以工作,但$(document.body)不会。所以根据定义它们并不等同。

我冒昧地猜测还有其他边缘情况(例如IE中的全局id'ed元素),它们也会触发相当于文档对象上覆盖的body元素的内容,并且同样的情况也适用。

答案 2 :(得分:9)

$(document.body)正在使用全局引用document来获取对body的引用,而$('body')是一个选择器,其中jQuery将获取对{{{1}的引用1 {}}元素<body>

我没有看到任何重大差异,也没有任何显着的性能增益。

答案 3 :(得分:6)

应该没有任何区别可能第一个是性能更高但我认为这是微不足道的(你不应该担心这个,真的)。

将两者都包装在jQuery对象中的<body>标记

答案 4 :(得分:6)

我在浏览器中测试时发现时间差异很大。

我使用了以下脚本:

警告:运行此命令会冻结浏览器,甚至可能导致浏览器崩溃。

&#13;
&#13;
var n = 10000000, i;
i = n;
console.time('selector');
while (i --> 0){
    $("body");
}

console.timeEnd('selector');

i = n;
console.time('element');
while (i --> 0){
    $(document.body);
}

console.timeEnd('element');
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

我做了1000万次互动,结果就是这些(Chrome 65):

  

选择器:19591.97509765625ms
  元素:4947.8759765625ms

直接传递元素的速度比传递选择器快4倍。

答案 5 :(得分:3)

Outputwise两者都是等价的。虽然第二个表达式是从DOM根目录进行自顶向下查找。如果您已经拥有了用于JQuery的document.body对象,那么您可能希望避免额外的开销(但可能是微不足道的)。 见http://api.jquery.com/jQuery/ #Selector Context