javascript - DOMContentLoaded 事件是否与 jQuery 的 .ready() 函数完全相同?

标签 javascript jquery dom events dom-events

我已经用 jQuery 的 $(document).bind('ready', function() {}) 替换了 window.addEventListener('DOMContentLoaded', function() {}); ;,因为第一个无法在 IE < 9 上运行,而且我不想为那个虚拟浏览器使用 .attachEvent(),如果我能用 jQuery 本身很好地覆盖它的话.

替换后不久,我注意到 DOMContentLoaded 事件总是在页面加载/刷新后大约 0-2 毫秒触发(至少这是我的日志脚本记录的内容),而 .ready() 在页面刷新后始终需要至少 15-20 毫秒才能触发(再次 - 如脚本所记录)。

我问纯粹是为了满足我的好奇心,为什么会有如此“重大”的延迟?当然,对我来说没有问题,jQuery 稍后会触发该事件。只是,因为我想知道所有答案(并统治世界!:]),所以我无法休眠! :]

编辑:在.ready() function doc一些用户(Nick(Nexxar 的))指出:“jQuery 模拟 IE 上不存在的“DOMContentLoaded”事件,但所使用的机制比其他浏览器上使用的事件晚得多触发”。也许这是相同的,我在问?

最佳答案

假设浏览器支持该事件:

  1. 真实事件可以支持任何文档。 jQuery 只会使用它加载的文档,无论您传递给它什么。
  2. 即使事件已经发生,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/

相关文章:

javascript - 一个接一个地加载脚本

javascript - 设置 Angular JS 奇怪的错误 angularjs :12416

JavaScript Onclick 函数

javascript - jQuery UI - 这相当于什么?

javascript - 验证两个日期,其中一个日期应大于 Javascript 中的其他日期

ruby-on-rails - Rails 奇数即使语句

javascript - 在Javascript中将foreignObject附加到SVG

javascript - 在另一个方法内部调用时,函数返回空数组而不是参数对象

jquery - 如何执行传递 id 而不是名称的 jQuery 自动完成?

javascript - 使用 AJAX、Javascript/jQuery、DOM 和 Facebook Like 按钮进行无限滚动