DOM构造完成后,立即执行JS的函数

demo: http://www.willko.cn/js/ready/ready.html
如果使用onload的话,必须等到整个页面完成后才执行。。但是这个demo在DOM构造完后就执行了。。
一般情况下,我们只是操作DOM。所以不需要等待整个页面下载完才执行。。速度提升了。

以下是代码:主要来自于 jQuery
我只是把代码独立出来而已。。。谢谢作者.

             function  ready(f) {
                ready.bindReady();
                
                
if (ready.isReady) {
                    f();
                }

                
else {
                    ready.readyList.push(f);
                }

            }

            
            ready.isReady 
=   false ;
            ready.readyBound 
=   false ;
            ready.readyList 
=   new  Array();
            ready.userAgent 
=  navigator.userAgent.toLowerCase();
            ready.browser 
=   {
                version: (ready.userAgent.match(
/.+(?:rv|it|ra|ie)[/: ]([d.]+)/|| [])[1],
                safari: 
/webkit/.test(ready.userAgent),
                opera: 
/opera/.test(ready.userAgent),
                msie: 
/msie/.test(ready.userAgent) && !/opera/.test(ready.userAgent),
                mozilla: 
/mozilla/.test(ready.userAgent) && !/(compatible|webkit)/.test(ready.userAgent)
            }
;
            
            ready.execute 
=   function () {
                
if (ready.isReady) {
                    
return;
                }

                
var len = ready.readyList.length;
                
for (var n = 0; n < len; n++{
                    ready.readyList[n]();
                }

                
                ready.readyList 
= null;
                
                
if (ready.browser.mozilla || ready.browser.opera) 
                    document.removeEventListener(
"DOMContentLoaded", ready.execute, false);
                
                ready.isReady 
= true;
            }

            
            ready.bindReady 
=   function () {
                
if (ready.readyBound) {
                    
return;
                }

                ready.readyBound 
= true;
                
                
if (ready.browser.mozilla || ready.browser.opera) 
                    document.addEventListener(
"DOMContentLoaded", ready.execute, false);
                
                
else 
                    
if (ready.browser.msie) {
                        document.write(
"<scr" + "ipt id=__ie_init defer=true " +
                        
"src=//:></script>");
                        
                        
var script = document.getElementById("__ie_init");
                        
                        
if (script) 
                            script.onreadystatechange 
= function(){
                                
if (this.readyState != "complete"
                                    
return;
                                ready.execute();
                            }
;
                        
                        script 
= null;
                    }

                    
else 
                        
if (ready.browser.safari) 
                            ready.safariTimer 
= setInterval(function(){
                                
if (document.readyState == "loaded" ||
                                document.readyState 
== "complete"{
                                
                                    clearInterval(ready.safariTimer);
                                    ready.safariTimer 
= null;
                                    
                                    ready.execute();
                                }

                            }
10);
                
                
if (typeof window.addEventListener == "function"{
                    window.addEventListener(
"load", ready.execute, false);
                }

                
else if (typeof window.attacheEvent == "function"{
                        window.attacheEvent(
"onload", ready.execute);
                        }

            }


使用方法:
            ready( function () {
                alert(
'DOM构造完成');
            }
);


ready可以多次调用...参数是个函数..

大家可以看这篇文章.... http://peter.michaux.ca/article/553
汗!!我这篇BLOG..只有这个网址是有意义的...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值