jQuery的ready方法詳解
來源:易賢網(wǎng) 閱讀:907 次 日期:2014-12-01 11:39:29
溫馨提示:易賢網(wǎng)小編為您整理了“jQuery的ready方法詳解”,方便廣大網(wǎng)友查閱!

jQuery中的ready方法實(shí)現(xiàn)了當(dāng)頁面加載完成后才執(zhí)行的效果,但他并不是window.onload或者doucment.onload的封裝,而是使用 標(biāo)準(zhǔn)W3C瀏覽器DOM隱藏api和IE瀏覽器缺陷來完成的,首先,我們來看jQuery的代碼

代碼如下:

DOMContentLoaded = function()

{

//取消事件監(jiān)聽,執(zhí)行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();

//表示頁面已經(jīng)加載完成,直接調(diào)用 ready方法 if ( document.readyState === "complete" ) {

//將 jQuery.ready壓入異步消息隊(duì)列,設(shè)置延遲時(shí)間1毫秒(注意,有些瀏覽器延遲不能小于4毫秒) setTimeout( jQuery.ready);

}

else if ( document.addEventListener ) // {

//監(jiān)聽DOM加載完成 document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );

//這里是為了確保所有ready執(zhí)行結(jié)束,如果DOMContentLoaded方法執(zhí)行了,將有一個(gè)狀態(tài)值 isReady被設(shè)置為true,因此, //ready方法一旦執(zhí)行,那么將只執(zhí)行一次,window.addEventListener中的ready 將被 return 中斷 window.addEventListener( "load", jQuery.ready, false );

} else {

//低版本的IE瀏覽器 document.attachEvent( "onreadystatechange", DOMContentLoaded );

window.attachEvent( "onload", jQuery.ready );

var top = false;

try {

top = window.frameElement == null && document.documentElement;

} catch(e) {}

if ( top && top.doScroll ) //剔除iframe的成分 {

(function doScrollCheck() {

if ( !jQuery.isReady ) {

try {

//根據(jù)bug來兼容低版本的IE top.doScroll("left");

} catch(e) {

//由于低版本的IE 瀏覽器,onreadystatechange事件不可靠,因此需要根據(jù)各個(gè)bug來判斷頁面是否已加載完成 return setTimeout( doScrollCheck, 50 );

}

jQuery.ready();

}

})();

}

}

}

return readyList.promise( obj );

};

代碼如下:

ready: function( wait )

{

if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {

//判斷頁面是否已完成加載并且是否已經(jīng)執(zhí)行ready方法

return;

}

if ( !document.body ) {

return setTimeout( jQuery.ready );

}

jQuery.isReady = true; //指示ready方法已被執(zhí)行

if ( wait !== true && --jQuery.readyWait > 0 ) {

return;

}

readyList.resolveWith( document, [ jQuery ] );

if ( jQuery.fn.trigger ) {

jQuery( document ).trigger("ready").off("ready");

}

},

總結(jié):

頁面加載完成有兩種事件,一是ready,表示文檔結(jié)構(gòu)已經(jīng)加載完成(不包含圖片等非文字媒體文件),二是onload,指示頁 面包含圖片等文件在內(nèi)的所有元素都加載完成。(可以說:ready 在onload 前加載?。?!)

一般樣式控制的,比如圖片大小控制放在onload 里面加載;

jS事件觸發(fā)的方法,可以在ready 里面加載;

更多信息請查看IT技術(shù)專欄

更多信息請查看腳本欄目
易賢網(wǎng)手機(jī)網(wǎng)站地址:jQuery的ready方法詳解
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)