Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery是如何实现$(document).ready()的?_Javascript_Jquery_Browser - Fatal编程技术网

Javascript jquery是如何实现$(document).ready()的?

Javascript jquery是如何实现$(document).ready()的?,javascript,jquery,browser,Javascript,Jquery,Browser,jquery如何实现$(document.ready() 当然,我可以阅读代码,但我正在寻找概念…它测试document.body的计算结果是否错误:一般来说, 它检查浏览器是否已将body元素加载到DOM树中, 在这种情况下,它执行cb(),而不等待其他请求(图像…) 否则它会等待一段时间并重新检查..概念: 虽然JavaScript提供了在呈现页面时执行代码的加载事件,但在完全接收到所有资产(如图像)之前,不会触发此事件。在大多数情况下,只要完全构建DOM层次结构,就可以运行脚本传递给.re

jquery如何实现
$(document.ready()


当然,我可以阅读代码,但我正在寻找概念…

它测试
document.body
的计算结果是否错误:

一般来说, 它检查浏览器是否已将body元素加载到DOM树中, 在这种情况下,它执行cb(),而不等待其他请求(图像…)

否则它会等待一段时间并重新检查..

概念:

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

它根据浏览器来实现它(例如,IE是不同的),但在某些特殊情况下,例如在加载DOM后调用它时,它会采用这种方式。(我不知道不看来源如何回答这个问题)

(设置事件绑定的内容是):

只绑定一次

    if ( readyBound ) {
        return;
    }
    readyBound = true;
确保处理在“DOM加载”之后调用ready的情况

W3C标准事件模型

    // Mozilla, Opera and webkit nightlies currently support this event
    if ( document.addEventListener ) {
        // Use the handy event callback
        document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
老派的退路

        // A fallback to window.onload, that will always work
        window.addEventListener( "load", jQuery.ready, false );
        // A fallback to window.onload, that will always work
        window.attachEvent( "onload", jQuery.ready );
IE事件模型(Opera也可能会使用它)

老派的退路

        // A fallback to window.onload, that will always work
        window.addEventListener( "load", jQuery.ready, false );
        // A fallback to window.onload, that will always work
        window.attachEvent( "onload", jQuery.ready );
更多的行为,使其在不同环境下与IE保持一致。请注意,事件绑定用于“onreadystatechange”

        // If IE and not a frame
        // continually check to see if the document is ready
        var toplevel = false;

        try {
            toplevel = window.frameElement == null;
        } catch(e) {}

        if ( document.documentElement.doScroll && toplevel ) {
            doScrollCheck();
        }
    }
},
doscorlcheck
在IE中设置一个“轮询”,该轮询仅在成功条件成功时调用处理程序。有关详细信息,请参阅源代码(它使用了IE的一个怪癖)


快乐编码。

这是一个很好的解释。我不确定OP是否可以阅读源代码。你在问题的标题中要求实现(代码),但在正文中要求概念。你所说的概念是什么意思?实现的一般概述?如果您这样做-1,请说明原因。否则,您的-1将添加。。。嗯,没什么。在两个主要版本发布后,旧答案不适用,哈哈。1ms轮询仅在IE中(并且仅在某些上下文中)。(对于徘徊的人:设置超时的1ms值会导致更长的实际超时时间——比如说15+ms——仅仅是因为计时器分辨率。)
        // If IE and not a frame
        // continually check to see if the document is ready
        var toplevel = false;

        try {
            toplevel = window.frameElement == null;
        } catch(e) {}

        if ( document.documentElement.doScroll && toplevel ) {
            doScrollCheck();
        }
    }
},