将脚本标签放在</body>标签之前是否等价于jQuery的document.ready方法?

6
如果我们在结束body标签之前的脚本标签中调用javascript方法myMethod(),是否等同于在jQuery的document.ready函数内调用myMethod()?如果不是,为什么?
3个回答

6

这里得知:

底层原理:$(document).ready()。正如你所期望的,jQuery用了很多优化方式来确定DOM何时准备好。例如,如果浏览器支持DOMContentLoaded事件(像许多非IE浏览器一样),那么它会在该事件上触发。但是,IE不能安全地触发直到文档的readyState达到“complete”,通常会更晚一些。如果没有这些优化,window.onload将触发该事件。

这些事件与HTML标签中的位置无关,因为其他事件仍在渲染</body>时进行。


3

不,这并不是完全一样的,你需要在闭合标签 </body> 之前放置 <script> 标签以避免在旧浏览器上阻塞 html 的渲染,就我所知,但你无法保证 DOM 已经 "准备好了"。


0

不完全正确。 $(document).ready(); 会响应所谓的 DOMContentLoaded 事件,该事件在 DOM 加载完成并且浏览器意识到页面上所有元素(而不是内容本身)后立即触发。

代码通常放在这些块中的主要原因与防止并行加载阻塞关系不大,而是确保在页面加载期间要操作的元素实际上已经加载并存在于 DOM 树中。如果浏览器不知道某些元素,那么操纵它们就没有多少意义了,对吧?

将 JavaScript 内容(或任何其他内容)放在页面底部实际上更接近于 onload 事件,在页面完成加载(包括内容本身)后触发。无论如何,几乎可以肯定的是,$(document).ready() 块内的内容将在页面底部的内容之前执行,但是如果您加载依赖于 ready() 块内代码的外部库,则不能将其放在页面底部。

一般来说,如果你的代码不依赖于外部库并且成功加载了DOM,你可以放心地将其放在页面底部。然而,如果你有一些需要在DOM加载完成后立即执行的内容,那么你肯定希望将该代码放在$(document).ready()块中,但请记住,你可以将该块放在任何位置,甚至是页面中间(这有时候是一个很好的技巧)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接