我知道我可以使用不同的框架(如prototype或jquery)将函数附加到window.onload,但这不是我正在寻找的.
我需要像.readyState这样的东西,这样我就可以这样做:
if(document.isReady){ var id = document.getElem ... }
除了使用框架的功能之外,还有其他方法吗?
编辑:随着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
,那么我们知道我们还没准备好.
虽然我通常主张避免使用框架,除非有必要,但我认为在这种情况下使用框架是完全没问题的.这是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('Tags | 热门标签RankList | 热门文章
- 1MongoDB无法启动服务器:默认存储引擎'wiredTiger'不适用于此mongod版本
- 2JavaScript - Math.cos的逆向(30)
- 3角js有哪些替代方案?
- 4RxJava在活动恢复后重新订阅事件
- 5使用底部深层链接打开活动或片段
- 6如何导入列表项?
- 7使用WP API v1和v2打破Android Loopj图像上传
- 8为什么JavaFX不包含在Ubuntu Wily(15.10)的OpenJDK 8中?
- 9无法使用YTPlayerView NSCocoaErrorDomain Code = 258嵌入YouTube视频
- 10使用Promise从Angularjs中的JSON文件读取数据
- 11使用lpSolveAPI获得0/1-Knapsack MILP的多种解决方案
- 12UIActivityViewController将sourceView设置为UIBarButtonItem
- 13Node.js中的createServer方法
- 14在运行Django单元测试时强制删除任何先前的测试数据库(autoclobber),例如在PyCharm中
- 15如何以编程方式将箭头功能与常规功能区分开?
- 16使用内联汇编在数组上循环
- 17无法从'const char [3]'转换为'char *'x100000(Qt Creator C ++ Windows 32)
- 18如何隐藏CefSharp.WinForms.ChromiumWebBrowser右键单击上下文菜单?
- 19使用WebApi的OData路由在导航问题上引发异常
- 20在Objective-C类中使用时,无法在调试区域中看到Swift对象层次结构