【问题标题】:how to know the first ready state of DOM如何知道 DOM 的第一个就绪状态
【发布时间】:2012-12-13 11:41:43
【问题描述】:

我正在尝试获取 DOM 的第一个就绪状态。第二个,第三个等不是我感兴趣的,而是第一个。有什么技巧可以让 DOM 的第一个就绪状态?

$(document).ready(function() {
  // is it the first ready state?
});

【问题讨论】:

  • $(window).load( function() { });
  • 自己处理readystatechange event。 jQuery 的文档就绪处理程序会告诉您文档何时“就绪”,因此您的回调函数将被调用一次,而不是在每次就绪状态更改时调用。
  • document.onreadystatechange = function () { alert(document.readyState); }​
  • 您预计有多少?好像只有two readystatesone readystatechange
  • @nnnnnn 我认为它与document.DOMContentLoaded 或JQUERY $(document).ready() 相同

标签: javascript html dom document-ready


【解决方案1】:

readyState 有 4 个可能的值:

  • 未初始化 - 尚未开始加载
  • 正在加载 - 正在加载
  • interactive - 已加载足够多,用户可以与之交互
  • 完成 - 完全加载

要查看它的价值,请使用以下代码:

document.onreadystatechange = function () {
    if (document.readyState === YourChoice) {
        // ...
    }
}

我无法捕捉到uninitialized readyState。 (但我为什么需要它?)

如果您需要一个侦听器来完全加载 DOM,请使用:

document.addEventListener('DOMContentLoaded', YourListener);

document.addEventListener('load', YourListener);

甚至

window.onload = YourListener;

对于 jquery:

$(document).on("DOMContentLoaded", function() { });

$(document).on("load", function() { });

$(window).on("load", function() { });

【讨论】:

  • 所以,这个故事的寓意是第一个 readystate 将被视为loading?
  • “我无法捕获未初始化的 readyState。” - 我希望它以该状态开始,因此不会有关联的更改事件。 “但我为什么需要它?” - 确实。
  • @AspiringAqib 通常是的,我猜对于 iFrame 来说,可以捕获 uninitialized 事件
【解决方案2】:

啊,你正在使用 jQuery。看看the docs:只有一个ready事件!我永远不会开火多次。 Internally,这甚至可以用 Promise 处理,所以它不能触发多次。

【讨论】:

  • 太好了,你解开了我对答案的渴望:D
猜你喜欢
  • 2021-07-10
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
相关资源
最近更新 更多