jQuery的ready方法详解

2020-05-22 15:14:59易采站长站整理

jQuery中的ready方法实现了当页面加载完成后才执行的效果,但他并不是window.onload或者doucment.onload的封装,而是使用 标准W3C浏览器DOM隐藏api和IE浏览器缺陷来完成的,首先,我们来看jQuery的代码


DOMContentLoaded = function()
 {
         //取消事件监听,执行ready方法     if ( document.addEventListener )
    {     
        document.removeEventListener( “DOMContentLoaded”, DOMContentLoaded, false );
        jQuery.ready();
    }
     else if ( document.readyState === “complete” ) 
    {
        document.detachEvent( “onreadystatechange”, DOMContentLoaded );
        jQuery.ready();
    }
};


jQuery.ready.promise = function( obj ) {
    if ( !readyList ) {
        readyList = jQuery.Deferred();
            //表示页面已经加载完成,直接调用 ready方法         if ( document.readyState === “complete” ) { 
            //将 jQuery.ready压入异步消息队列,设置延迟时间1毫秒(注意,有些浏览器延迟不能小于4毫秒)             setTimeout( jQuery.ready); 
        } 
        else if ( document.addEventListener ) //         {
             //监听DOM加载完成             document.addEventListener( “DOMContentLoaded”, DOMContentLoaded, false );
             //这里是为了确保所有ready执行结束,如果DOMContentLoaded方法执行了,将有一个状态值 isReady被设置为true,因此,              //ready方法一旦执行,那么将只执行一次,window.addEventListener中的ready 将被 return 中断             window.addEventListener( “load”, jQuery.ready, false );
        } else {
            //低版本的IE浏览器             document.attachEvent( “onreadystatechange”, DOMContentLoaded );