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

93 jquery

我是一个JQuery初学者,虽然在一些代码中找到了一些例子.

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

谁能告诉我这两者有什么区别?

Jus*_*ier 71

它们引用相同的元素,区别在于当你说document.body你将元素直接传递给jQuery时.或者,当您传递字符串时'body',jQuery选择器引擎必须解释字符串以确定它引用的元素.

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

如果您有兴趣,jQuery函数的文档中有更多信息.


jve*_*ema 15

这里的答案实际上并不完全正确.关闭,但有一个边缘情况.

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

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

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


Gab*_*abe 9

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

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

  • 根据这篇文章,`$(document.body)`的速度要快得多:https://www.sitepoint.com/jquery-body-on-document-on/ (9认同)

Phi*_*ter 9

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

我使用了以下脚本:

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

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

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

选择器:19591.97509765625ms
元素:4947.8759765625ms

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

  • 你只是为了"箭头符号"得到了一个upvote,你厚颜无耻地吐了! (6认同)
  • 我在某处读到了这个,我想马上使用它 XD (2认同)

Nic*_*tti 6

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

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