$(document).ready() - 如何执行?

时间:2012-03-22 19:14:20

标签: jquery

$(document).ready() - 它是如何被执行的?在创建DOM之后光标是否会在该行中等待以执行代码,或者在浏览器创建DOM之后,此方法将像事件处理程序一样执行?

如果图像没有被下载但是$(document).ready()被执行以读取该图像的src属性以在DOM构造之后分配给其他一些局部变量,该怎么办?

3 个答案:

答案 0 :(得分:3)

这是一个事件处理程序,它等待下载的所有内容。它只等待DOM构造并且ready被转换。来自docs

  

当JavaScript提供用于执行代码的load事件时   页面呈现,此事件在所有资产之前都不会被触发   如图像已被完全接收。在大多数情况下,   只要DOM层次结构完全可以运行脚本   建造。传递给.ready()的处理程序是保证的   在DOM准备好之后执行,所以这通常是最好的地方   附加所有其他事件处理程序并运行其他jQuery代码。使用时   依赖于CSS样式属性值的脚本,这很重要   以前引用外部样式表或嵌入样式元素   引用脚本。

背后的代码实际上相当简单。它等待document.body可以访问(非空):

function (wait) {
    // Either a released hold or an DOMready/load event and not yet ready
    if ((wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady)) {
        // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
        if (!document.body) {
            return setTimeout(jQuery.ready, 1);
        }

        // Remember that the DOM is ready
        jQuery.isReady = true;

        // If a normal DOM Ready event fired, decrement, and wait if need be
        if (wait !== true && --jQuery.readyWait > 0) {
            return;
        }

        // If there are functions bound, to execute
        readyList.resolveWith(document, [jQuery]);

        // Trigger any bound ready events
        if (jQuery.fn.trigger) {
            jQuery(document).trigger("ready").unbind("ready");
        }
    }
}

来自http://james.padolsey.com/jquery/#v=1.6.2&fn=jQuery.ready

答案 1 :(得分:1)

.ready()代码块在页面中遇到时被解析/准备,但实际执行被推迟到满足“就绪”条件。您可以拥有任意数量的.ready()块 - 它们不会挂起页面 - 它们的设计不会挂起页面。

答案 2 :(得分:0)

当DOM准备好时它被触发了。 Fire when DOM is ready...