Domツリーのロード後に実行、jQueryのready

2440 ワード

(function(){
        var isReady=false;//  onDOMReady          
        var readyList= [];//                 
        var timer;//     
        ready=function(fn) {
               if (isReady )
                      fn.call( document);
               else
                      readyList.push( function() { return fn.call(this);});
               return this;
        }
        var onDOMReady=function(){
               for(var i=0;i<readyList.length;i++){
                      readyList[i].apply(document);
               }
               readyList = null;
        }
        var bindReady = function(evt){
               if(isReady) return;
               isReady=true;
               onDOMReady.call(window);
               if(document.removeEventListener){
                      document.removeEventListener("DOMContentLoaded", bindReady, false);
               }else if(document.attachEvent){
                      document.detachEvent("onreadystatechange", bindReady);
                      if(window == window.top){
                             clearInterval(timer);
                             timer = null;
                      }
               }
        };
        if(document.addEventListener){
               document.addEventListener("DOMContentLoaded", bindReady, false);
        }else if(document.attachEvent){
               document.attachEvent("onreadystatechange", function(){
                      if((/loaded|complete/).test(document.readyState))
                             bindReady();
               });
               if(window == window.top){
                      timer = setInterval(function(){
                             try{
                                    // IE      doScroll  dom      
                                   isReady||document.documentElement.doScroll('left');
                             }catch(e){
                                    return;
                             }
                             bindReady();
                      },5);
               }
        }
})();

次の操作を行います.
1、ready(fun);//funは方法がある
2、ready(function(){alert(1)})