2011-03-20 97 views
38

我試圖用getElementById()獲取元素,但即使元素存在但它仍返回null。我究竟做錯了什麼?即使元素存在,getElementById()也會返回null

<html> 
<head> 
    <title>blah</title> 
    <script type="text/javascript"> 
     alert(document.getElementById("abc")); 
    </script> 
</head> 
<body> 
    <div id="abc"> 

    </div> 
</body> 

回答

56

你必須把這個在documentload事件。在腳本執行的時候DOM還沒有到達abc

+14

執行把腳本在底部對初學者來說可能更容易。 – 2011-03-20 19:51:42

+0

啊,謝謝!始終認爲腳本是在html加載後運行的。 – Softnux 2011-03-20 19:56:01

+0

請注意,您必須等待10分鐘才能接受。 – pimvdb 2011-03-20 20:06:08

4

這是因爲腳本在頁面呈現之前運行。

爲了證明這個屬性添加到身體標記:

<body onload="alert(document.getElementById('abc'));" > 
0

但它不存在,而不是在HTML這一點。就像程序運行一樣,HTML文檔從上到下被解析。最好的解決方案就是將腳本標籤放在頁面底部。您也可以將JavaScript附加到onload事件。

28

您的腳本在DOM加載之前運行。爲了解決這個問題,你可以把你的代碼在window.onload功能,像這樣:

window.onload = function() { 
    alert(document.getElementById("abc")); 
}; 

另一種方法是把你的script權前收盤</body>標籤。

+3

「之前/ BODY」可能會混淆初學者。要求是將SCRIPT放在腳本需要引用的HTML元素之後。到/ BODY的距離不相關。 – 2011-03-20 20:02:14

+1

謝謝先生。你從24小時的壓力說我。 – Edwinfad 2017-09-17 12:18:50

6

如果你不想連接到負載事件後來乾脆把你的腳本在機身的底部,所以它會在最終

<html> 
<head> 
    <title>blah</title>  
</head> 
<body> 
    <div id="abc"> 
    </div> 
    <script type="text/javascript"> 
     alert(document.getElementById("abc")); 
    </script> 
</body> 
</html> 
相關問題