【问题标题】:Do I need to wait `domReady` if I put all my scripts after `</body>`?如果我将所有脚本放在 `</body>` 之后,是否需要等待 `domReady`?
【发布时间】:2012-11-01 23:05:48
【问题描述】:

jquery 有一个ready 方法:

$(document).ready(function(){
   // my code
})

当 dom 准备好时它会执行我的代码。

我有一个问题,如果我将所有脚本都放在&lt;/body&gt; 之后,例如

<html>
    <body>
       // all kinds of html tags
    </body>
    <script src="/path/to/jquery.js"></script>
    <script src="/path/to/all-javascript-compressed-in-one-file.js"></script>
</html>

我还需要写$(document).ready()吗? &lt;/body&gt;之后的dom已经是ready了吗?

【问题讨论】:

  • 如果是no,在各种浏览器上都是no吗?
  • 问题是,无论如何你都希望你的脚本是函数代码,所以你需要一个函数包装器,jQuery(function ( $ ) { ... }); 是实现这一目标的便捷方式。

标签: javascript domready


【解决方案1】:

通常,脚本被添加就在 &lt;/body&gt; 之前,而不是在它之后——否则 HTML 将不会验证;正如 Šime Vidas 在评论中指出的那样,&lt;head&gt;&lt;body&gt; 之外没有任何内容。

话虽如此,从技术上讲,此时 DOM 还没有准备好(因为浏览器仍在解析 &lt;body&gt;),但已经包含了正文中的所有元素。因此,跳过$(document).ready() 是安全的。

这样做会更早地执行您的初始化脚本,因为在实际的DOMContentLoaded 事件被触发之前会有一些延迟。这意味着更快的页面加载和更好的用户体验。

您可能对这个关于强制 jQuery ready 事件的 related discussion 感兴趣。

【讨论】:

  • 我读过一些建议将脚本放在最后的地方(可能是为了更快的页面加载)
  • @alfred - 是的,把它们放在最后,但通常,正如所指出的,它们紧挨着放在结束体标签之前,而不是在它之后。
  • HTML 就是这样定义的。任何内容都不能出现在&lt;head&gt;&lt;body&gt; 之外。
  • @myself - 就我个人而言,我倾向于将脚本放在头部分内。这有助于防止在调用缺少的函数时出现一些错误
【解决方案2】:

总之,没有。当 dom 树可用时,dom 被认为是“就绪”,如果您的 javascript 是页面上的最后一件事,那么在它之前的所有内容都“就绪”,因为网页是从上到下“加载”的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-10
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多