是否真的有必要等待DOM准备好操纵DOM?

mae*_*ics 4 javascript jquery events dom

如果您的代码只操作已经完全解析的DOM元素,是否真的有必要等待"ready"(或"window.onload")事件?

"ready()"函数的jQuery文档演示了如何在DOM完全就绪之前等待执行操作,但示例是在相关DOM元素之前列出的代码(脚本标记).但似乎在HTML文档中必要的DOM元素之后出现的代码可以访问它们,因为可能是DOM是在浏览器解析文档时构建的.

例如,可以安全地假设以下代码在所有情况下都是可靠的,或者仍然需要(或以某种方式有益)使用ready/onload处理程序?

<body>
  <div id="foo"/>
  <script type="text/javascript">
    var foo = document.getElementById('foo');
    foo.innerHTML = 'The element #foo is loaded!';
  </script>
</body>
Run Code Online (Sandbox Code Playgroud)

这个SO问题非常相似,但我想查看是否有更多信息.

ale*_*lex 6

如果您的JavaScript代码低于DOM元素并且仅以独占方式修改它们,则无需等待DOM ready事件.

但是,请记住编辑一个DOM元素,该script元素包含一个元素(或更具体地,在元素的结束标记之前),用于在IE6(感谢TJ Crowder)和IE7中引起大问题.

但是,这需要内联scripts,这可能是一个维护问题.最好将您的JavaScript存储在外部(并且很多人都会谈到在结束body标记之前包含它们的好处),以获得诸如易于维护和细粒度缓存控制等诸多好处.

  • 第一段和第二段+1.@maerics,请参阅Google Closure库团队的[此主题](http://groups.google.com/group/closure-library-discuss/browse_thread/thread/1beecbb5d6afcb41),了解何时可以操作元素(相当好的权限,每天有数百万人使用Closure库.@alex:你的第三段没有多大意义.你谈到内联`script`元素在下载时阻止执行,但是然后讨论在外部存储你的JavaScript. (3认同)