我已经用 jQuery 的 $(document).bind('ready', function() {}) 替换了
,因为第一个无法在 IE < 9 上运行,而且我不想为那个虚拟浏览器使用 window.addEventListener('DOMContentLoaded', function() {});
;.attachEvent()
,如果我能用 jQuery 本身很好地覆盖它的话.
替换后不久,我注意到 DOMContentLoaded
事件总是在页面加载/刷新后大约 0-2 毫秒触发(至少这是我的日志脚本记录的内容),而 .ready()
在页面刷新后始终需要至少 15-20 毫秒才能触发(再次 - 如脚本所记录)。
我问纯粹是为了满足我的好奇心,为什么会有如此“重大”的延迟?当然,对我来说没有问题,jQuery 稍后会触发该事件。只是,因为我想知道所有答案(并统治世界!:]),所以我无法休眠! :]
编辑:在.ready() function doc一些用户(Nick(Nexxar 的))指出:“jQuery 模拟 IE 上不存在的“DOMContentLoaded”事件,但所使用的机制比其他浏览器上使用的事件晚得多触发”。也许这是相同的,我在问?
最佳答案
假设浏览器支持该事件:
- 真实事件可以支持任何
文档
。 jQuery 只会使用它加载的文档
,无论您传递给它什么。 - 即使事件已经发生,jQuery 也会异步触发事件。如果事件已经发生,附加
'DOMContentLoaded'
事件将不会执行任何操作。
在这些浏览器中没有延迟,参见 http://jsfiddle.net/rqTAX/3/ (记录的偏移量以毫秒为单位)。
对于不支持该事件的浏览器,jQuery 显然也适用。它将使用与真正的 DOMContentLoaded
不同的 hacky 机制,并且不一定会像真正的 DOMContentLoaded
那样立即触发:
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
try {
// If IE is used, use the trick by Diego Perini
// http://javascript.nwbox.com/IEContentLoaded/
document.documentElement.doScroll("left");
} catch(e) {
setTimeout( doScrollCheck, 1 );
return;
}
// and execute any waiting functions
jQuery.ready();
}
关于javascript - DOMContentLoaded 事件是否与 jQuery 的 .ready() 函数完全相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11523359/