如果我们在关闭正文之前的脚本标签中调用 javascript 方法myMethod()
,是否等同于myMethod()
在 jQuery 的 document.ready 函数内部调用?如果不是,为什么?
3 回答
从这里:
底层:$(document).ready() 正如您对 John Resig 所期望的那样,jQuery 确定 DOM 何时准备就绪的方法使用了各种优化。例如,如果浏览器支持 DOMContentLoaded 事件(正如许多非 IE 浏览器所做的那样),那么它将触发该事件。但是,在文档的 readyState 达到“完成”之前,IE 不能安全地触发,这通常是稍后。如果这些优化都不可用,window.onload 将触发事件。
这些事件独立于 HTML 标记中的位置,因为即使在呈现时其他事件仍在进行</body>
。
不,它不一样,您将<script>
标签放在结束</body>
标签之前以避免阻塞旧浏览器上的 html 呈现,AFAIK,但您不能保证 DOM 已“准备好”
不完全是。对在加载 DOM 并且浏览器知道页面上的所有元素(而不是内容本身)后立即触发$(document).ready();
的所谓事件做出反应。DOMContentLoaded
通常将代码放在这些块中的主要原因与防止并行加载阻塞无关,而是确保在页面加载期间要操作的元素实际加载并存在于 DOM 树中。操作浏览器不知道的元素没有多大意义,对吧?
将 JavaScript 内容(或任何其他内容)放在页面底部实际上与onload
页面完成加载后触发的事件更密切相关,包括内容本身。无论哪种方式,几乎可以肯定$(document).ready()
块内的内容将在页面底部的内容之前执行,但是如果您加载ready()
块内的代码所依赖的外部库,则不能将它们放在页面底部。
一般来说,如果您的代码不依赖于外部库并且成功加载 DOM,您可以安全地将其放在页面底部。但是,如果您有需要在 DOM 加载后立即执行的内容,您肯定希望该代码$(document).ready()
块中,但请记住,您可以将该块放置在任何您想要的位置,即使在页面中间(有时这可能是一个不错的技巧)。