6

如果我们在关闭正文之前的脚本标签中调用 javascript 方法myMethod(),是否等同于myMethod()在 jQuery 的 document.ready 函数内部调用?如果不是,为什么?

4

3 回答 3

6

这里

底层:$(document).ready() 正如您对 John Resig 所期望的那样,jQuery 确定 DOM 何时准备就绪的方法使用了各种优化。例如,如果浏览器支持 DOMContentLoaded 事件(正如许多非 IE 浏览器所做的那样),那么它将触发该事件。但是,在文档的 readyState 达到“完成”之前,IE 不能安全地触发,这通常是稍后。如果这些优化都不可用,window.onload 将触发事件。

这些事件独立于 HTML 标记中的位置,因为即使在呈现时其他事件仍在进行</body>

于 2012-04-16T11:25:15.983 回答
3

不,它不一样,您将<script>标签放在结束</body>标签之前以避免阻塞旧浏览器上的 html 呈现,AFAIK,但您不能保证 DOM 已“准备好”

于 2012-04-16T11:22:49.743 回答
0

不完全是。对在加载 DOM 并且浏览器知道页面上的所有元素(而不是内容本身)后立即触发$(document).ready();的所谓事件做出反应。DOMContentLoaded

通常将代码放在这些块中的主要原因与防止并行加载阻塞无关,而是确保在页面加载期间要操作的元素实际加载并存在于 DOM 树中。操作浏览器不知道的元素没有多大意义,对吧?

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

一般来说,如果您的代码不依赖于外部库并且成功加载 DOM,您可以安全地将其放在页面底部。但是,如果您有需要在 DOM 加载后立即执行的内容,您肯定希望该代码$(document).ready()块中,但请记住,您可以将该块放置在任何您想要的位置,即使在页面中间(有时这可能是一个不错的技巧)。

于 2012-04-16T11:47:17.100 回答