2012-06-14 58 views
0

HTML/JavaScript的執行順序,因爲據我所知,是串行(如在所有的編程語言),這意味着瀏覽器中的HTML/JavaScript代碼逐行地讀取並解釋它。執行Wonderings DOM秩序

這就是爲什麼一些JavaScript程序員把標籤在身體的結束 - 以確保整個DOM被加載,他們現在可以訪問他們想要的任何元素。 這是他們是如何做到這一點 -

<html> 
... 
<body> 
... 
<script> //whatever code you want to put 
</script> 
</body> 

我想測試這個,所以我寫了下面的代碼

<html> 
<head> 
</head> 
<body> 
<script> 
var elm=document.getElementById("myp"); 
alert(elm.innerHTML); 
</script> 
<p id="myp"> well this is darned interesting </p> 
</body> 
</html> 

正如你可以看到我已經把腳本定義p元素和前該腳本正試圖訪問它。我以爲我會得到一個錯誤,因爲p不應該被定義,但我得到了「這是很有趣的」(p的值)。 當我將腳本放在head元素中時,會發生同樣的事情。 (testest使用Chrome和Firefox)。

任何人都可以提供一些線索到這是怎麼回事?

+0

我在螢火蟲控制檯/ Fx13上發生錯誤,正如我預期的那樣:http://jsfiddle.net/x8BmK/ – fcalderan

+0

好的,但結果仍然是'這是非常有趣的'。我只是想知道現代瀏覽器對這個問題發生了什麼...... –

+0

什麼結果?該警報完全不顯示,並且該文本已經是標記 – fcalderan

回答

2

暫且不論這是怎麼回事與這個特殊的例子的細節,我會總結的一般原則。我的來源是Flanagan,JavaScript:終極指南,5/e。

這太簡單化認爲瀏覽器作爲閱讀HTML行和響應渲染的東西。當然,它會依次掃描輸入,但DOM對象構建的順序與掃描的輸入不成一行。最好把它當作黑匣子來對待。

如果你想運行一個腳本,將操作DOM元素,在安全可靠的方法是運行它作爲onload事件的處理程序。有時你可以編寫內聯腳本來完成它,但這是一個灰色區域。弗拉納根寫道:

大多數瀏覽器似乎允許腳本操作任何文件的<script>標記之前出現 元素。一些JavaScript程序員通常會這樣做。然而,沒有標準就需要 工作,且有持續性,如果含糊地,在一些 相信有經驗的JavaScript程序員是將文件操作代碼 內<script>標籤可能會導致問題....(第256頁)

但是,在解析所有HTML之後但在加載所有圖像之前,您可能需要操作DOM。如果這是你的需要,那麼像jQuery和它的事件是一個工具。

+0

謝謝戴夫,這是有趣的東西 –