【问题标题】:$(document) vs. $("document")$(document) 与 $("document")
【发布时间】:2011-06-14 17:32:43
【问题描述】:

$(document)$("document")之间有什么区别吗?

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

【问题讨论】:

    标签: javascript jquery document


    【解决方案1】:

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

    $("document") 试图寻找<document> 元素,这在HTML 中显然没有意义,因为没有这样的元素,只有document 元素在标记中表示的根<html> 对象。它的行为是这样的,因为通过向 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",它什么都不选。第四种语法等待文档准备好,但暗示(错误地)它等待图像准备好。

    【讨论】:

    • 那么$("html")和$(document)有什么区别呢?
    • @Andrew:html 是文档根元素(document.documentElement),而不是文档对象。如果您想修改 html 元素本身(例如,通过添加或删除类名),请使用 $("html"),而不是 $(document)。
    • @BoltClock 我想将点击处理程序添加到整个“页面”,我应该使用 $(document) 还是 $("html") ?
    【解决方案2】:

    如果您正在谈论调用.ready() 函数,它(当前)没有区别。

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

    你可以这样做:

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

    要明确一点,最好使用官方支持的对.ready()的调用,它们是:

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

    和:

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

    实际选择document时,应使用$(document)

    【讨论】:

    • 确实是有区别的。你是说.ready() 调用适用于任何jQuery 对象吗?如果这是真的,那你为什么不能使用$.ready(...)
    • @Greg,Bolt:我更新了。我过早地将另一个想法强加给了这个问题。
    • @Greg:是的,您可以使用$.fn.ready(),尽管它不受官方支持。 jsfiddle.net/tmpTG
    • .ready() 的情况下确实如此-$(document) 在功能上真的与空的jQuery 对象相同吗?我从来没有真正考虑过。
    • @Bolt:这是对我心不在焉的尴尬表现的非常亲切的描述。 :o)
    【解决方案3】:

    您的第一个示例将在您的 JS 中搜索名为 document 的变量或对象。 (注意,它是一个预定义的变量)

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

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

    【讨论】:

      【解决方案4】:

      document 是一个预制的全局变量,表示当前 HTML 文档,是 window.document 的缩写。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-01
        • 2011-04-11
        • 2013-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多