2012-03-30 84 views
1

我有一個頁面,它有document.body.onload=function(){...},但由於文檔還包含外部<img>標籤等, onload似乎只是在這些外部網站發佈某種響應後才被解僱。Javascript:在document.onload之前訪問DOM

我把代碼放在onload中,因爲我認爲在那之前DOM樹並不是完全可用的(例如,如果太快調用document.getElementById(x)可能會返回null)。

是否有一個事件在DOM中的所有內容都可訪問之後觸發,但在所有內容都已加載之前?

+1

您也可以加載外部圖像 – mplungjan 2012-03-30 17:21:40

+0

'document.body.onload'不存在。你可能會考慮''。 – 2012-03-31 17:18:55

回答

5

你只需把你的<script>標籤在身體的結束,因爲HTML是按順序解析。

此外,你可以看看jquery的document.ready。即使你不想使用jQuery,你可以看看他們如何處理它。 ready完全符合你的要求。

2

當然,你可以:

也許你有兩個選擇:

1) 通過使用jQuery: 與$(document).ready(),你可以得到你的事件加載或火災或任何你想之前他們做窗口加載。

2) DOMContentLoaded 參考:https://developer.mozilla.org/en/DOM/DOM_event_reference/DOMContentLoaded

function checkDom(yourFunc) 
{ 
    window.addEventListener('DOMContentLoaded', yourFunc); 
} 
+0

這是jquery,在問題中未提及或標記。另外,這根本無濟於事,你需要使用'ready'。 – 2012-03-30 17:32:25

0

您應該考慮是否真的需要加載整個文檔。只要您的庫已經加載,並且您感興趣的DOM節點在頁面上,您就可以立即採取行動。這種代碼使得頁面「活躍起來」的速度遠遠超過一個,對於每一個最後的資源等待負載:

<form name="foo"> 
    <!-- ... --> 
</form> 
<script> 
    var form = new My.FormWidget(document.forms.foo); 
</script> 

這具有迫使你在FormWidget(你應該要邏輯封裝的好處儘可能簡短地保持「內聯」腳本)。