如果我的脚本位于正文末尾,我应该使用DOM就绪函数吗?

时间:2010-01-03 03:44:27

标签: javascript jquery dom

我知道,在jQuery中,我们被告知要使用$(document).ready()以确保DOM元素已准备好进行交互。我知道如果脚本标签在<head>中,这肯定适用。如果它们位于<body>的末尾,在所有DOM元素之后,我是否还应该使用DOM-ready函数?如果我不这样做,我的代码会失败吗?

谢谢!

4 个答案:

答案 0 :(得分:13)

<script>之前的</body>块中,您无法做到一件事:将DOM内容附加到正文中。这是追加相对于解析的问题,导致IE与可怕的“操作中止”相吻合。

因此,如果您有脚本或插件来执行此操作,则无法在body元素的末尾内联调用它们。否则继续。

它不会在最新的Mozilla,Opera或WebKit浏览器上获得任何东西,因为它们无论如何都会在瞬间触发ready。它将避免在IE中出现令人不愉快但基本无害的黑客循环,并且对于其他(较旧的或较为模糊的)浏览器而言,它会更快地触发,否则它们将等待onload

答案 1 :(得分:1)

将脚本放在最后是另一个原因:浏览器并行加载JS文件,因为它们会影响之后的所有内容。实际上,在下载和解析JS文件之前,所有内容都会在浏览器中停止 - 文本,图像,所有内容。因此,除非您必须尽早加载它们,否则请在页面末尾加载JS。

答案 2 :(得分:0)

DOM-ready函数确保实际创建了整个DOM,以便可以访问文档中的所有元素。正常window.onload仅在加载了所有图像时加载,而jQuery的事件在文档结构存在时立即触发。如果您需要“在文档加载时”发生某些事情,则没有理由使用$(document).ready()以外的任何内容。

答案 3 :(得分:0)

我从未遇到过无法访问我脚本之前出现的html元素DOM的浏览器。

那就是说,如果你已经拉入jQuery左右,我可能会使用ready()方法,只是为了让其他习惯使用jQuery的人更容易理解代码。

你有什么理由想避免这种情况吗?

(如果你正在寻找一种避免加载jQuery的方法,那么,是的,根据我的经验,你总是可以访问脚本之前出现的元素的DOM。)