2012-01-05 148 views
24

document.getElementById('id of div that definately exists')返回null。getElementById返回null?

我最初加載了javascript最後爲了確保我不需要擔心onload事件。我也嘗試使用onload事件。這非常恐怖。任何想法或幫助將不勝感激。

+2

的[爲什麼jQuery的或DOM方法等的getElementById找不到元素?](http://stackoverflow.com/q/14028959/1048572) – Bergi 2015-06-16 01:49:02

+0

我重複有一個類似的情況,我的內容是動態生成的,並且腳本查詢ID在腳本創建之前使用該ID創建內容。我修正了這個順序,它對我有用 – 2017-03-01 06:45:01

回答

31

它可以由以下情況引起:

  1. 無效HTML語法(一些標籤未關閉或類似的錯誤)
  2. ID重複 - 有具有相同ID
  3. 也許元件兩個HTML DOM元素你試圖通過ID獲取動態創建(由Ajax加載或由腳本創建)?

請發表您的代碼。

+9

#2實際上不會產生'null',而只是帶有該id的兩個元素中的第一個。 – Bergi 2015-06-16 01:48:18

+0

感謝拯救了我的生命 – 2017-06-09 13:36:55

7

可能有很多原因,document.getElementById不起作用

  • 你有一個無效的ID

    ID和名稱標記必須以字母開頭([A-ZA-Z] ),可以跟隨任意數量的字母,數字([0-9]),連字符(「 - 」),下劃線(「_」),冒號(「:」)和句點(「。」)。 (資源:What are valid values for the id attribute in HTML?

  • 你使用你已經在你的頭作爲<meta>名稱(例如版權,作者...),它看起來奇怪,但發生在我身上的一些ID:如果你的「重新使用IE看看 (資源:http://www.phpied.com/getelementbyid-description-in-ie/

  • 您正在定位幀或iframe中的元素。在這種情況下,如果iframe中加載父的同一個域中的一個頁面,你應該尋找的元素 之前針對contentdocument(資源:Calling a specific id inside a frame

  • 你只是尋找一個元素時,該節點不是有效地加載到DOM,或者也許這是一個簡單的拼寫錯誤

我懷疑你用相同的ID兩次或更多:在這種情況下document.getElementById應該回到你如何執行至少第一要素

+0

感謝iframe的提示,幫了我一把! – 2013-11-20 14:14:15

41

另外要小心pag上的js即例如,如果你這樣做:

(function(window, document, undefined){ 

    var foo = document.getElementById("foo"); 

    console.log(foo); 

})(window, document, undefined); 

這將返回null,因爲您將在加載之前調用文檔。

更好的選擇..

(function(window, document, undefined){ 

// code that should be taken care of right away 

window.onload = init; 

    function init(){ 
    // the code to be called when the dom has loaded 
    // #document has its nodes 
    } 

})(window, document, undefined); 
相關問題