JQuery的$(document).ready(function(){})与JS的window.onload 的各自优势!

本文深入探讨了JQuery中$(document).ready()方法与window.onload的区别及应用场景,解析了两者的执行时机与效率,以及在特定场景下各自的优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于项目需要,使用JQuery也有相当一段时间了。由于经常要处理DOM节点加载、图片显示以及动态资源请求,所以对$(document).ready(function(){})理解也越来越深了,所有在此分享我的一些体会:

1. $(document).ready(function(){...}) 此方法是JQuery版本的window.onload = function(){...}。

  1.1 $(document).ready(function(){...})的其他两种缩写形式: $().ready(function(){...})【这种写法官方文档上说不建议使用】 和 $(function(){...})。

  1.2 $(document).ready(function(){...})与window.load执行顺序:$(document).ready(...)是在页面加载完所有DOM节点文档结构后开始执行,window.onload则是在页面加载所有资源后才开始执行。也就是说window.onload要等到所有图片,外链资源都加载完后才开始执行,也因此window.onload只允许定义一个(实际是可以定义多个,但只有最后一个有效,相当于前面会被覆盖掉),而$(function(){...})可以允许定义多个,并且按照定义的先后顺序先后执行。对于大部分应用情况下,$(function(){...})可以说完胜window.onload,因此其执行时间早,用户体验就更好。但是在一些特定情况下,情况不一定,在下面第2节会举例说明。

2. $(document).ready(function(){...})不好使或者说不如window.onload的情况:

  2.1 因为$(document).ready(function(){...})是在一旦DOM节点加载完后就开始执行,但是如何页面中引用的其他的JS脚本,并且修改了一些DOM节点结构,那么这个时候$(document).ready(function(){..})就有可能无法检测到实际的节点。例如:

 1 <html>
 2 <head>
 3 <script src="/Scripts/MyJS.js?v=1.0.0>" type="text/javascript"></script>
 4 <script type="text/javascript"> $(function(){...}); </script>
 5 </head>
 6 <body>
 7 ...
 8 <div> 
 9     ....
10 </div>
11 ....
12 </body>
13 </html>

 

  在MyJs.js中有对应的代码将上述代码中的绿色DIV加上class = “title2"属性。这个时候可能由于MyJs.js比较大,在执行$(function(){....})时,MyJs.js还没加载完,我如果在$(function(){...}中就无法使用$("div.title2")等来进行选择节点。当然,你可以在执行$("div.title2")代码之前加上定时器进行解决这种情况,但是由于不知道要等多长时间才能获取得到div.title2,因此这种方法也不能完全解决(你可能已经想到另一种解决方法了,那就是可以采用setInternal来解决这个问题了,实际上也确实可以,我自己也使用过此方法解决过实际问题,尤其是一些图片显示的)。此时如果你用window.onload就不会有这个烦恼了!

  2.2 另一种情况就是有一些页面中可以会嵌入一些web service,这个情况下,使用$(function(){...})也可能无法获取到web service请求后的对应的DOM节点,其原因与2.1类似,不再赘述。

  这是我自己在运用JQuery解决实际一些问题时的一些体会,如果有不对之处,欢迎大家指出加入改正,分享!

转载于:https://www.cnblogs.com/BrainDeveloper/p/3190378.html

### jQuery `$(document).ready` 和 `window.onload()` 的执行顺序 在网页加载过程中,`$(document).ready` 和 `window.onload` 都用于指定当页面达到特定状态时要运行的代码。然而两者触发条件不同。 - 当 DOM 文档结构完全加载完成之后会立即调用由 `$(document).ready` 绑定的方法,在此阶段图像等资源可能尚未下载完毕[^1]。 - 而 `window.onload` 则会在整个页面的所有组件(包括图片、样式表和其他媒体文件)都已加载完成后才会被触发。 因此通常情况下 `$(document).ready` 执行得更早一些;如果存在多个 `$(document).ready` 函数,则它们按照定义顺序依次被执行。而只有一个全局级别的 `onload` 事件处理程序可以设置给窗口对象,任何新的赋值都会覆盖之前的函数指派。 下面通过一段简单的 HTML 来展示两者的区别: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document Ready vs Window OnLoad</title> <!-- 引入 jQuery 库 --> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> </head> <body> <script type="text/javascript"> // 使用 $(document).ready() $(document).ready(function(){ console.log('DOM is ready'); }); // 使用 window.onload window.onload = function() { console.log('All resources are loaded'); }; </script> </body> </html> ``` 在这个例子中,“DOM is ready”的日志消息应该先出现,紧接着才是“All resources are loaded”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值