jquery (js中window.onload与jquery中$(document.ready())的区别)

jquery 学习之一(js中window.onload与jquery中$(document.ready())的区别) 

耳听为虚,眼见为实。通过下面的实例可查看两者的异同(注意:aa.jpg最好是一张大容量图片) 
Java代码   收藏代码
  1. <html>  
  2. <head>  
  3. <script type='text/javascript' src='jquery-1.3.2.min.js'></script>  
  4. <script type='text/javascript'>  
  5.     $(document).ready(function(){  
  6.         alert("先加载DOM结构,再弹出对话框,后加载大型图片及内容");  
  7.     });  
  8.     
  9.    //***************  
  10.    //window.οnlοad=function(){ alert("先加载DOM结构,后加载大型图片及内容,再弹出对话框");}  
  11.    //***************  
  12. </script>  
  13. </head>  
  14. <body>  
  15. <p>大量内容</p>  
  16. <img src='aa.jpg'/>  
  17. </body>  
  18. </html>  


说明: $(document).ready()是在DOM结构载入完后执行的,而window.onload是得在所有文件都加载完后执行的,注意区别,一个是DOM加载完,一个是所有文件加载完  

所谓DOM加载完,就是指DOM模型加载完,也就是指代码加载完。 
两者最大的区别,就是DOM加载完之后,不必再去等相应的图片加载完就可以执行JS代码了。
 

补充:(两者的具体用法) 
window.onload用法 
Java代码   收藏代码
  1. <script type='text/javascript'>  
  2. function winready(){  
  3.     document.getElementByIdx_x.('load').style.display='none';  
  4. }  
  5. window.οnlοad=winready; //或者window.οnlοad=function(){winready();}  
  6. </scritp>  


jquery用法: 
Java代码   收藏代码
  1. <script type='text/javascript'>  
  2.     $(document).ready(function(){  
  3.         $('#load').css('display','none');  
  4.     })  
  5. </script>  


来源于 
http://blog.sina.com.cn/s/blog_5d95e3130100qlh6.html 
虽然原生JS没有给我们提供ready方法,但我们也可以自己简单构建一个,尽管没有jQuery中那么强大,但也勉强够用。 
Java代码   收藏代码
  1. document.ready = function(fn) {  
  2.     // 标准浏览器中,我们监听DOMContentLoaded事件来判断DOM加载完毕  
  3.     if (document.addEventListener) {  
  4.         document.addEventListener("DOMContentLoaded", function() {  
  5.             document.removeEventListener("DOMContentLoaded", fn, false);  
  6.         }, false);  
  7.     }  
  8.    
  9.     // IE中我们根据document.documentElement.doScroll("left")出错,来判断DOM加载完毕  
  10.     else {  
  11.         if (document.documentElement.doScroll && window == window.top) (function(){  
  12.             try {  
  13.                 document.documentElement.doScroll("left");  
  14.             } catch (error) {  
  15.                 setTimeout(fn, 0);  
  16.                 return;  
  17.             }  
  18.         })();  
  19.     }  
  20. }  



<script language='javascript'> 

   document.ready(function(){ 

           alert('Document is ready!'); 

   }); 

</script> 

      打开页面,看到效果没?YES,这就是去掉了 $(); 的 document.ready(); 咱不再依赖 jQuery,但如果你的站点已经使用了 jQuery,就不用再多此一举了。 

                                  为保护作者版权,特此连接原文作者连接:http://www.vgot.net/?A65.htm 

另外:经实践得知,两者都可以加载多个函数 

      另外还有一个来自于 PHPWind 论坛程序中某个脚本中的函数片段(由于字数限制,此处省略,详细的可看原文作者:http://www.vgot.net/?A65.htm ) 

      其实 window.onload 也并非是一无用处,很多情况下一些B/S软件需要页面全部加载后才提供用户相关功能,这样 window.onload 就可以提供一种“加载中”的功能,又或者是页面内容很少,完全无需 document.ready(); 根据各种情况,应该合理的使用 onload 和 ready。 

     通常我们想要在页面内容加载完成后运行 JS 时,都会使用 window.onload 来处理,比如: 

<script language="javascript"> 

       window.onload = function () { 

               alert('Hello World!'); 

        } 

</script> 
     这段代码将在页面载入完成后弹出一个 "Hello World!" 的警告框,但是众所周知,window.onload 的特点是页面元素全部加载完成后才执行,比如页面内有大量的图片之类,当打开网页时,其实相关的 DOM 已经全部加载完成,此时已经可以执行你想要执行的脚本了,可是图片的加载速度要很慢于页面的 HTML,这显然在大多数情况下不是我们想要的。 

      jQuery 提供一个 $(document).ready(); 来解决此问题,当页面 DOM 加载完成后,ready() 里的函数便会立即执行,但如果我们在不使用 jQuery 的情况下呢? 
好了,废话不多说,大家都明白想要什么,以下是来自国外网站的一段代码,功能同等于 jQuery 的 $(document).ready(); 

看代码: 

Java代码   收藏代码
  1. <script language='javascript'>  
  2.   
  3. (function () {  
  4. var ie = !!(window.attachEvent && !window.opera);  
  5. var wk = /webkit\/(\d+)/i.test(navigator.userAgent) && (RegExp.$1 < 525);  
  6. var fn = [];  
  7. var run = function () { for (var i = 0; i < fn.length; i++) fn[i](); };  
  8. var d = document;  
  9. d.ready = function (f) {  
  10.     if (!ie && !wk && d.addEventListener)  
  11.       return d.addEventListener('DOMContentLoaded', f, false);  
  12.     if (fn.push(f) > 1return;  
  13.     if (ie)  
  14.       (function () {  
  15.         try { d.documentElement.doScroll('left'); run(); }  
  16.         catch (err) { setTimeout(arguments.callee, 0); }  
  17.       })();  
  18.     else if (wk)  
  19.       var t = setInterval(function () {  
  20.         if (/^(loaded|complete)$/.test(d.readyState))  
  21.           clearInterval(t), run();  
  22.       }, 0);  
  23. };  
  24. })();  
  25.   
  26. </script>  

      把这段代码放到你的页面中或者某个导入的脚本中,然后你就可以像下面这样使用了: 
来源 
http://hi.baidu.com/sch362017466/blog/item/fdbeb1ec148935dbb21cb172.html 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值