$(document).ready是否必要?


111

我在stackoverflow中看到了这个问题,但根本感觉不到答案。

$(document).ready必要吗?

我在页面底部链接了我的所有JavaScript,因此从理论上讲,它们在文档准备就绪后都可以运行。


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

Answers:


125

$(document).ready必要吗?

没有

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

此外,如果脚本不需要访问DOM,那么在其他脚本可能的依赖范围之外,将脚本加载到何处也没关系。

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

题外话:

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


您确定其“完全相同”吗?我的印象是您的CSS(或与主html并行加载的其他代码)可能尚未完全解析。
Zach Lysobey

6
@ZachL,可以在完全解析CSS之前准备好文档。document.ready 是不一样onload情况下,其中的图像和其他外部资产已完成加载。
zzzzBov

感谢您的澄清。
Zach Lysobey

5
这个“不”只是花了我3个小时的工作..请确保您不要误认为</ body>与<body> :)
teejay 2014年

1
我不一定同意强制使用别名,特别是如果noConflict()出于某些原因需要使用别名时。
杰·布兰查德

22

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

另外,下面的代码是$(document).ready的简写形式。

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

这个问题可能很好。你读过它吗? jQuery:如果在页面底部使用外部JS,为什么还要使用document.ready?


6
问题本质上是“当我将脚本放在正文底部时,我是否需要文档准备就绪?”,而不是“是否有编写快捷方式$(document).ready()”。
nnnnnn 2013年

4

不,只要您知道自己没有发生任何延误的事情就没有必要-在大多数情况下,您会知道自己是否已经完成了从上到下的工作。

-当您输入别人的代码而不进行彻底审核时,您是不知道的。

因此,问问自己,您是否正在使用可帮助您进行结构设计的框架或编辑器?您是否正在引入其他人的代码,而又没有费心阅读每个文件?您准备好要通过操作系统,浏览器和浏览器版本矩阵来测试代码了吗?您是否需要从代码中挤出每一盎司的速度?

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


只是我看到的一件事-您的其中一项编辑被拒绝了,但对我来说看起来不错。您可能要重新提交一个:stackoverflow.com/review/suggested-edits/3224385
澳洲航空公司94年重

1

我已经在互联网上看到有关jquery的用法的参考/博客文章document.ready。我认为使用它或将所有JavaScript放在页面底部都有效。现在的问题是哪个更好?这只是编程风格的问题。


0

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

<script>alert('DOM Loaded!');</script>
</body>

<script>
document.addEventListener("DOMContentLoaded", function(event) { 
      // DOM has loaded ready to fire JS scripts
    });
</script>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.