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