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

2020/11/16 18:11 · jquery ·  · 0评论

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

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

两者之间有什么区别吗?

它们指的是同一元素,不同之处在于,当您说document.body要直接将元素传递给jQuery时。另外,当您传递字符串时'body'jQuery选择器引擎必须解释字符串以弄清楚它所指的是哪个元素。

在实践中,任一个都可以完成工作。

如果您有兴趣,可以在jQuery函数的文档中找到更多信息

这里的答案实际上并不完全正确。关闭,但是有一个极端的情况。

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

这意味着如果您(或流氓脚本)覆盖了document.body元素(可耻!),$('body')仍然可以工作,但是$(document.body)不能。因此,根据定义,它们并不等效。

我冒昧地猜测还有其他一些极端情况(例如IE中的全局id元素)也将触发等于文档对象上的body元素的情况,并且同样的情况也适用。

在浏览器中进行测试时,我发现计时的差异很大。

我使用以下脚本:

警告:运行该命令会使您的浏览器停滞不前,甚至可能使其崩溃。

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');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

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

选择器:19591.97509765625ms

元素:4947.8759765625ms

直接通过元素比通过选择器快约4倍。

$(document.body)使用全局引用document获取对的引用body,而是$('body')使用选择器,jQuery将在其中使用对上<body>元素的引用document

我看不到任何重大差异,彼此之间没有明显的性能提升。

完全没有区别,也许第一个是性能更高的,但是我认为这是微不足道的(您真的不必为此担心)。

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

从输出角度看,两者都是等效的。尽管第二个表达式从DOM根开始进行自上而下的查找。如果您已经准备好将JQuery包起来的document.body对象,那么您可能希望避免额外的开销(不过可能很小)。参见http://api.jquery.com/jQuery/ #Selector上下文

本文地址:http://jquery.askforanswer.com/document-bodyhebodyzhijiandequbie.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!