jQuery如何檢查文檔是否加載?它如何檢查文檔加載是否完成?jQuery的「文檔準備」功能如何工作?
回答
查看source code中的函數bindReady。
它們綁定到DOMContentLoaded事件(或在某些瀏覽器上的onreadystatechange)。如果DOMContentLoaded不受支持或由於其他原因未被解僱,它們也會回退到常規加載事件。在瀏覽器支持的話,他們使用此電話:
document.addEventListener("DOMContentLoaded", DOMContentLoaded, false);
在IE < 9:
document.attachEvent("onreadystatechange", DOMContentLoaded);
的DOMContentLoaded
在這些調用第二個實例是他們自己的函數 - 實際上到ready
功能權利作爲參考在源代碼中高於bindReady
。該功能將通過檢查document.body
來檢查DOM樹是否實際完成。如果它還不存在,它們會等待一毫秒(使用setTimeout)並再次檢查。當document.body存在時,它們遍歷您設置的回調列表。
jQuery沒有做JavaScript不能做/不做的任何事 - 它只是一個JavaScript框架/庫。它所做的是提供瀏覽器實現的JavaScript事件的包裝,例如onload
($.load()
)和DOMContentLoaded
($.ready()
)。當然,還有很多工作要做,試圖在跨瀏覽器的情況下儘可能標準化這種行爲,並圍繞瀏覽器錯誤,問題和不兼容問題開展工作。
例如,IE在IE 9之前並不真正支持DOMContentLoaded
,但jQuery必須爲其提供實現。您可能希望看到這些鏈接瞭解更多有關本次活動是和一個如何可能實現,即使沒有jQuery的類似的東西,:
- http://api.jquery.com/ready/#comment-85629494
- http://www.zachleat.com/web/domcontentloaded-inconsistencies/
- http://www.kryogenix.org/days/2007/09/26/shortloaded
- $(document).ready equivalent without jQuery
如果你真的想看看jQuery做了什麼,你應該檢查jQuery source。
所以有一點點去幕後,但是這是它的主要內容,直接爲jQuery的源:
// Mozilla, Opera and webkit nightlies currently support this event
if (document.addEventListener) {
// Use the handy event callback
document.addEventListener("DOMContentLoaded", DOMContentLoaded, false);
// A fallback to window.onload, that will always work
window.addEventListener("load", jQuery.ready, false);
// If IE event model is used
} else if (document.attachEvent) {
// ensure firing before onload,
// maybe late but safe also for iframes
document.attachEvent("onreadystatechange", DOMContentLoaded);
// A fallback to window.onload, that will always work
window.attachEvent("onload", jQuery.ready);
// If IE and not a frame
// continually check to see if the document is ready
var toplevel = false;
try {
toplevel = window.frameElement == null;
} catch(e) {}
if (document.documentElement.doScroll && toplevel) {
doScrollCheck();
}
}
所以對於大多數的瀏覽器(Mozilla的,歌劇和Webkit)有一個DOMContentLoaded
jQuery正在偵聽的事件,當它被觸發時,它會調用您使用jQuery註冊的所有就緒處理程序。
IE的行爲有點不同,因爲他們沒有DOMContentLoaded
事件,他們試圖鉤住onreadystatechange
事件的文件,他們也勾了window.onload
事件,以及做的代碼偷偷摸摸位,他們不斷嘗試每毫秒滾動頁面(doScrollCheck)。這些火災中哪一個首先觸發準備好的處理程序,而後續事件被忽略。
我希望這是有道理的,並幫助你:)
- 1. jQuery文檔準備功能
- 2. jquery如何調用文檔準備好的功能
- 3. 如何放置文檔準備功能的AJAX功能
- 4. JavaScript文檔準備好功能
- 5. 對文檔準備做Ajax功能
- 6. 準備功能的JQuery
- 7. jquery的準備功能
- 8. 的jQuery的功能和文件準備
- 9. jQuery的文件準備功能
- 10. 如何引用文檔準備好的功能?
- 11. JQuery啓動文檔準備就緒並調整大小功能
- 12. jQuery文檔準備和按鍵來調用一個功能
- 13. 在文檔準備就緒時觸發jQuery更改功能
- 14. 無法獲取文檔準備工作
- 15. $文檔準備不工作ie8
- 16. jQuery .live()和文檔準備
- 17. JQuery Dialog文檔準備好
- 18. jquery文檔準備就緒
- 19. jquery文檔準備問題
- 20. 在準備功能如何獲得文本值jQuery的
- 21. jquery事件只在文檔準備工作
- 22. jquery文件準備功能,加載後功能
- 23. JQuery的準備功能差異
- 24. 主要提供文檔/準備功能的Javascript框架
- 25. emberjs應該在哪裏文檔準備好的功能去?
- 26. CUDA設備功能如何工作?
- 27. JQuery文檔就緒功能不能在IE中工作
- 28. 在使用jQuery文檔準備功能絕對DIV居中圖像隨機工作在IE 8
- 29. dom操作後準備好的文檔
- 30. jQuery的準備功能沒有被撞到裏面的功能
得愛jQuery! – turtlepick 2011-05-11 04:35:14