我是一名JQuery初学者,在查找一些代码中的一些示例时。
$(document.body)
和$('body')
有人能告诉我这两者有什么不同吗?
答案 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)
我在浏览器中测试时发现时间差异很大。
我使用了以下脚本:
警告:运行此命令会冻结浏览器,甚至可能导致浏览器崩溃。
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;
我做了1000万次互动,结果就是这些(Chrome 65):
选择器:19591.97509765625ms
元素:4947.8759765625ms
直接传递元素的速度比传递选择器快4倍。
答案 5 :(得分:3)
Outputwise两者都是等价的。虽然第二个表达式是从DOM根目录进行自顶向下查找。如果您已经拥有了用于JQuery的document.body对象,那么您可能希望避免额外的开销(但可能是微不足道的)。 见http://api.jquery.com/jQuery/ #Selector Context