2012-03-22 74 views
3

$(document).ready() - 它是如何執行的?遊標是否會在該行中等待,以便在DOM創建後執行代碼或者在瀏覽器創建DOM之後,該方法將像事件處理程序一樣執行?

如果圖像不被下載但$(document).ready()被執行以讀取該圖像的src屬性以在DOM構建之後分配給某個其他本地變量?

+3

無論圖像資源是否可在頁面中嵌入/可見,圖像的src'都將存在於DOM中。但是+1提出的問題直到現在我還沒有想過。 =) – 2012-03-22 19:17:19

+1

除此之外,'$(window).load()'在所有資源加載後執行 – Matthew 2012-03-22 19:20:10

回答

3

這是一個事件處理程序,它等待一切下載。它只是等待,直到DOM被構建,並且ready被轉換。從docs

雖然JavaScript提供了當 呈現頁面時執行代碼的加載事件,不會被觸發此事件,直到如圖像的所有資產 已經完全接收。在大多數情況下,只要DOM層次已完全構建,就可以運行 腳本。傳遞給.ready()的處理程序保證在DOM準備就緒後執行 ,所以這通常是 附加所有其他事件處理程序並運行其他jQuery代碼的最佳位置。在使用依賴CSS樣式屬性的值的 腳本時,重要的是 在引用腳本之前引用外部樣式表或嵌入樣式元素 之前。

其實背後的代碼相當簡單。它只是等待document.body可訪問(NOT NULL):

function (wait) { 
    // Either a released hold or an DOMready/load event and not yet ready 
    if ((wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady)) { 
     // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). 
     if (!document.body) { 
      return setTimeout(jQuery.ready, 1); 
     } 

     // Remember that the DOM is ready 
     jQuery.isReady = true; 

     // If a normal DOM Ready event fired, decrement, and wait if need be 
     if (wait !== true && --jQuery.readyWait > 0) { 
      return; 
     } 

     // If there are functions bound, to execute 
     readyList.resolveWith(document, [jQuery]); 

     // Trigger any bound ready events 
     if (jQuery.fn.trigger) { 
      jQuery(document).trigger("ready").unbind("ready"); 
     } 
    } 
} 

http://james.padolsey.com/jquery/#v=1.6.2&fn=jQuery.ready

1

的。就緒()的代碼塊進行解析,/它在網頁中遇到的時候坦然,但實際執行中的推遲到「準備就緒」條件滿足爲止。您可以根據需要擁有儘可能多的.ready()塊 - 它們不會掛起頁面 - 它們設計爲不掛起頁面。

+0

如果我可以根據需要添加儘可能多的.ready()方法,那麼它會按它存在的順序執行這一頁? – deen 2012-03-22 19:31:37

+0

我相信如此,但實際上並不確定。我很少必須使用多個就緒塊,並且它們都不依賴於順序。 – 2012-03-22 19:33:59

相關問題