2011-01-24 34 views
10

有没有区别:$(document)$("document")

编辑:当进入.ready()例如$("document").ready()

回答

19

$(document)使用jQuery来包装全局document对象。

$("document")尝试寻找一个<document>元件,这显然是没有意义的HTML,因为没有这样的元素,仅在由<html>元件的标记表示的根document对象。它的行为方式是因为通过传递jQuery函数一个字符串,你实际上给它一个selector

重新编辑:作为patrick dw说,在ready()情况下没有区别,实际上在jQuery 3.0的使用$(document)所有或显式调用ready()已被弃用。从documentation

jQuery提供了几种方法来附加一个函数,该函数将在DOM准备就绪时运行。以下所有的语法是等效的:

  • $(handler)
  • $(document).ready(handler)
  • $("document").ready(handler)
  • $("img").ready(handler)
  • $().ready(handler)

在jQuery 3.0,仅建议所述第一语法;其他语法仍然有效,但不推荐使用。这是因为选择与.ready()方法的行为没有关系,这是低效的并且可能导致对方法行为的错误假设。例如,第三种语法与"document"一起工作,它不选择任何东西。第四种语法等待文档准备就绪,但意味着(不正确)它等待图像准备就绪。

+2

非常好的答案是什么*实际*问题。 +1 – user113716 2011-01-24 19:19:39

+0

那么$(“html”)和$(document)之间有什么区别呢? – Andrew 2017-03-14 19:09:43

0

documentdocument是一个预制的全局变量,它是当前HTML文档的表示形式,简写为window.document

$("document"),正如@BoltClock指出的那样,将使用该字符串作为<document>元素的选择器。

1

你的第一个例子将在你的JS中搜索一个名为document的变量或对象。 (请小心,它是一个预定义变量)

第二个将在页面中搜索名称为“document”的标签。

var document = 'div#logo'; 
$(document); //will search for div#logo 
$('document'); //will search for document 
7

如果你谈论调用.ready()功能,它(目前)没有什么区别。

在这两种情况下,参数都被忽略。

你可以这样做:

$("cheese pizza").ready(function() {}); 

要清楚,最好是使用.ready()正式支持的电话,它们是:

$(document).ready(function(){/*...*/}); 

和:

$(function(){/*...*/}); 

当act如果选择document,则应使用$(document)