【问题标题】:Is $(document).ready necessary?$(document).ready 有必要吗?
【发布时间】:2011-06-06 08:25:57
【问题描述】:

我在stackoverflow中看到了这个问题,但觉得根本没有答案。

$(document).ready 有必要吗?

我在页面底部链接了我所有的 javascript,所以理论上它们都在文档准备好之后运行。

【问题讨论】:

  • 旧浏览器可能无法享受新浏览器采用的并行下载。这是您的脚本放在底部的主要原因。它特别允许您的 HTML 和 CSS 首先在较旧的浏览器上呈现。此时,您可以选择如何完成对 DOM 已加载的感知。启动 js 的两种流行方法是 window.onload 和 $(document).ready(与 jQuery 结合使用)。 window.onload 还有其他选项和易于搜索的明显缺点。关键是 $(document).ready 经常工作且易于使用。

标签: jquery document-ready


【解决方案1】:

$(document).ready 有必要吗?

没有

如果您将所有脚本都放在了 </body> 结束标记之前,那么您所做的就是完全相同的事情。

此外,如果脚本不需要访问 DOM,那么除了可能依赖于其他脚本之外,它的加载位置无关紧要。

对于许多 CMS,您没有太多选择脚本的加载位置,因此模块化代码使用 document.ready 事件是一种很好的形式。如果您在其他地方重用旧代码,您真的要回去调试旧代码吗?

题外话:

附带说明:您应该使用jQuery(function($){...}); 而不是$(document).ready(function(){...});,因为它会将别名强制为$

【讨论】:

  • 你确定它是“完全相同的东西”吗?我的印象是您的 css(或与主 html 并行加载的其他代码)可能尚未完全解析。
  • @ZachL,文档可能在 CSS 完全解析之前就准备好了。 document.ready onload 事件不同,其中图像和其他外部资源已完成加载。
  • 这个“不”只花了我 3 个小时的工作时间。只要确保你不要把
【解决方案2】:

不,如果您的 javascript 是关闭前的最后一件事,则您不需要添加这些标签。

作为旁注,$(document).ready 的简写是下面的代码。

$(function() {
// do something on document ready
});

这个问题可能很好。你读过它吗? jQuery: Why use document.ready if external JS at bottom of page?

【讨论】:

  • 问题本质上是“当我将脚本放在正文底部时,我是否需要准备好文档?”,而不是“是否有写$(document).ready() 的快捷方式”。跨度>
【解决方案3】:

不,如果您知道您没有发生任何延迟的事情,则没有必要 - 而且在大多数情况下,您会知道您是否已经从上到下开发了您正在处理的内容。

--当你引入别人的代码,没有彻底审计它,你不知道。

所以,问问自己,您是否使用了可以帮助您处理结构的框架或编辑器?您是否引入了其他人的代码并且您没有费心阅读每个文件?您准备好通过操作系统、浏览器和浏览器版本矩阵来测试您的代码了吗?您需要从代码中榨取每一盎司的速度吗?

document.ready() 使许多这些问题变得无关紧要。 document.ready() 旨在让您的生活更轻松。它对性能的影响很小(我敢说可以接受)。

【讨论】:

【解决方案4】:

我在互联网上看到过关于 jquery 的 document.ready 使用的参考资料/博客文章。在我看来,使用它或将所有 javascript 放在页面底部都是有效的。现在的问题是哪个会更好?这只是编程风格的问题。

【讨论】:

    【解决方案5】:

    不,没有必要。您可以将脚本标记放在正文结束标记之前,或者如果您支持 IE9+,则可以使用本机 JS。

    <script>alert('DOM Loaded!');</script>
    </body>
    
    <script>
    document.addEventListener("DOMContentLoaded", function(event) { 
          // DOM has loaded ready to fire JS scripts
        });
    </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      相关资源
      最近更新 更多