当前位置:  开发笔记 > 编程语言 > 正文

javascript domready?

如何解决《javascriptdomready?》经验,为你挑选了7个好方法。

我知道我可以使用不同的框架(如prototype或jquery)将函数附加到window.onload,但这不是我正在寻找的.

我需要像.readyState这样的东西,这样我就可以这样做:

if(document.isReady){
  var id = document.getElem ...
}

除了使用框架的功能之外,还有其他方法吗?



1> Ryan Wheale..:

编辑:随着2018年到来,我认为听这个DOMContentLoaded活动是安全的.

function fireOnReady() { /* ... */ }
if (document.readyState === 'complete') {
    fireOnReady();
} else {
    document.addEventListener("DOMContentLoaded", fireOnReady);
}

请注意,活动只会在您的网页加载时触发一次!如果你必须支持真正的旧浏览器,那么看看我在下面放在一起的超轻量级脚本.



仅供参考:



jQuery有一个名为isReady的未记录属性,它在内部用于确定是否已触发DOM ready事件:

if($.isReady) {
    // DOM is ready
} else {
    // DOM is not yet ready
}

我从1.5.2开始回到1.3.2并且财产就在那里.虽然没有文档,但我会说你可以在将来的jQuery版本中依赖这个属性. 编辑:一年后 - v1.7.2,他们仍然使用$.isReady- 仍然没有记录,所以请自担风险使用.升级时要小心.

编辑: v1.9,他们仍然使用$.isReady- 仍然没有记录

编辑: v2.0,所有它的"主要"更改,仍然使用$.isReady- 仍然没有记录

编辑: v3.x仍然使用$.isReady- 仍然没有记录

编辑:有几个人指出,上面并没有真正回答这个问题.所以我刚刚创建了一个迷你DOM准备片段,其灵感来自Dustin Diaz 甚至更小的DOM准备片段.Dustin创建了一个简洁的方法来检查文件readyState,其内容与此类似:

if( !/in/.test(document.readyState) ) {
    // document is ready
} else {
    // document is NOT ready
}

这样做的原因是因为浏览器有3种加载状态:"加载","交互"和"完整" (旧的WebKit也使用"加载",但你不必再担心了).你会注意到"loading"和"interactive"都包含文本"in"...所以如果在里面找到字符串"in" document.readyState,那么我们知道我们还没准备好.


这不回答问题(OP不想使用框架).但是,它确实为这个标记为"完全重复"的问题提供了一个很好的答案(+1来自我).http://stackoverflow.com/questions/8373910/in-jquery-how-do-i-check-if-the-dom-is-ready
不确定为什么投票.我解释说这是没有证件的.在未来版本的jQuery中调试这个问题会非常简单,而且它是那些自我描述的变量之一,永远不会传递"这个更好的名字"测试,因此可能永远不会重命名.无论如何......我希望人们能够解释投票.

2> Blixt..:

虽然我通常主张避免使用框架,除非有必要,但我认为在这种情况下使用框架是完全没问题的.这是jQuery:

$(function () {
    // do stuff after DOM has loaded
});

请注意,它与window.onload事件不同,因为onload在加载其他资源(图像等)之后首先执行.我的示例中使用的代码将在DOM完成加载时执行,即,当完整的HTML结构可用时(不一定在图像,CSS等可用时.)

如果需要可检查变量,可以在ready-function中设置一个:

var documentIsReady = false;
$(function () { documentIsReady = true; });

当然,如果你想做的就是检查DOM-ready,你可以找到比jQuery更轻量级的库.但是在不同浏览器行为异常的情况下使用库(这就是这种情况).

使用DOMAssistant库中的一些代码,制作自己的"DOM就绪"功能应该不会太难:

var domLoaded = function (callback) {
    /* Internet Explorer */
    /*@cc_on
    @if (@_win32 || @_win64)
        document.write('




















    
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有