如果我们在结束body标签之前的脚本标签中调用javascript方法
myMethod()
,是否等同于在jQuery的document.ready函数内调用myMethod()
?如果不是,为什么?myMethod()
,是否等同于在jQuery的document.ready函数内调用myMethod()
?如果不是,为什么?从这里得知:
底层原理:$(document).ready()。正如你所期望的,jQuery用了很多优化方式来确定DOM何时准备好。例如,如果浏览器支持DOMContentLoaded事件(像许多非IE浏览器一样),那么它会在该事件上触发。但是,IE不能安全地触发直到文档的readyState达到“complete”,通常会更晚一些。如果没有这些优化,window.onload将触发该事件。
这些事件与HTML标签中的位置无关,因为其他事件仍在渲染</body>
时进行。
不,这并不是完全一样的,你需要在闭合标签 </body>
之前放置 <script>
标签以避免在旧浏览器上阻塞 html 的渲染,就我所知,但你无法保证 DOM 已经 "准备好了"。
不完全正确。 $(document).ready();
会响应所谓的 DOMContentLoaded
事件,该事件在 DOM 加载完成并且浏览器意识到页面上所有元素(而不是内容本身)后立即触发。
代码通常放在这些块中的主要原因与防止并行加载阻塞关系不大,而是确保在页面加载期间要操作的元素实际上已经加载并存在于 DOM 树中。如果浏览器不知道某些元素,那么操纵它们就没有多少意义了,对吧?
将 JavaScript 内容(或任何其他内容)放在页面底部实际上更接近于 onload
事件,在页面完成加载(包括内容本身)后触发。无论如何,几乎可以肯定的是,$(document).ready()
块内的内容将在页面底部的内容之前执行,但是如果您加载依赖于 ready()
块内代码的外部库,则不能将其放在页面底部。
$(document).ready()
块中,但请记住,你可以将该块放在任何位置,甚至是页面中间(这有时候是一个很好的技巧)。