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