$(document).ready()和window.onload的區(qū)別

$(document).ready()和window.onload在表面上看都是頁面加載時我們就去執(zhí)行一個函數(shù)或動作,但是在具體的細(xì)節(jié)上$(document) ready()和window onload還是有區(qū)別的。

最基本的區(qū)別

1.執(zhí)行時間

window.onload必須等到頁面內(nèi)包括圖片的所有元素加載完畢后才能執(zhí)行。

$(document).ready()是DOM結(jié)構(gòu)繪制完畢后就執(zhí)行,不必等到加載完畢。

2.編寫個數(shù)不同

window.onload不能同時編寫多個,如果有多個window.onload方法,只會執(zhí)行一個

$(document).ready()可以同時編寫多個,并且都可以得到執(zhí)行

3.簡化寫法

window.onload沒有簡化寫法

$(document).ready(function(){})可以簡寫成$(function(){});

$(document).ready()方法和window.onload方法有相似的功能,但是在執(zhí)行時機方面是有區(qū)別的。window.onload方法是在網(wǎng)頁中所有的元素(包括元素的關(guān)聯(lián)文件)完全加載到瀏覽器后才執(zhí)行,即JavaScript此時才可以訪問網(wǎng)頁中的任何元素。而通過jQuery中的$(document).ready()方法注冊的事件處理程序,可以在DOM完全就緒時就可以被調(diào)用。此時,網(wǎng)頁的所有元素對jQuery而言都是可以訪問的,但是,這并不意味著這些元素關(guān)聯(lián)的文件都已經(jīng)下載完畢。

舉一個例子,有一個大型的圖庫網(wǎng)站,為網(wǎng)頁中所有圖片添加某些行為,例如單擊圖片后讓它隱藏或顯示。如果使用window.onload方法來處理,那么用戶必須等到每一幅圖片都加載完畢后,才可以進行操作。如果使用jQuery中的$(document).ready()方法來進行設(shè)置,只要DOM就緒時就可以操作了,不需要等待所有圖片下載完畢。很顯然,把網(wǎng)頁解析為DOM樹的速度比把網(wǎng)頁中的所有關(guān)聯(lián)文件加載完畢的速度快很多。

另外需要注意一點,由于在$(document).ready()方法內(nèi)注冊的事件,只要DOM就緒就會被執(zhí)行,因此可能此時元素的關(guān)聯(lián)文件未下載完。例如與圖片有關(guān)的HTML下載完畢,并且已經(jīng)解析為DOM樹了,但很有可能圖片還未加載完畢,所以例如圖片的高度和寬度這樣的屬性此時不一定有效。要解決這個問題,可以使用JQuery中另一個關(guān)于頁面加載的方法——load()方法。load()方法會在元素的onload事件中綁定一個處理函數(shù)。如果處理函數(shù)綁定給window對象,則會在所有內(nèi)容(包括窗口、框架、對象和圖像等)加載完畢后觸發(fā),如果處理函數(shù)綁定在元素上,則會在元素的內(nèi)容加載完畢后觸發(fā)。

$(window).load(function(){ ?} ) ?等價于js中的 ? window.onload=funciton(){ ?}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容