2014-04-29 42 views
-1

我有一個我想用來操縱dom的js函數。爲了便於閱讀,假設我在元素B之前插入了元素A.元素A通過內聯樣式將display設置爲none。我通過js更改display屬性並嘗試插入,但是我得到一個錯誤「無法在'Node'上執行'insertBefore',新的子元素爲空。操作dom時新的JavaScript子節點爲空錯誤

作爲一個完整性檢查,我有兩個警報,檢查是否在DOM中存在的元素,他們都這樣做。有人可以解釋如何做到這一點,並告訴我如何完成這項任務。

document.getElementById('Parent_of_Element_A').style.display = 'block'; 
document.getElementById('Parent_of_Element_B').style.display = 'block'; 
if (document.getElementById('Element_B')) 
    alert('Found Reference Element'); 
if (document.getElementById('A')) 
    alert('Found Element to be added'); 
document.body.insertBefore('A', 'B'); 
+1

請出示你的HTML。此外,'null'對於'visibility'屬性不是有效的值。 – isherwood

+0

錯誤消息非常明確:「insertBefore」的參數是「null」而不是有效的DOM元素。您發佈的代碼沒有任何'insertBefore'調用,請使用發生錯誤的代碼進行更新。 – Barmar

+1

這條線似乎是問題:'document.body.insertBefore('A','B');' - 而不是傳入你正在談論的元素的ID,你應該傳遞一個對元素本身。 I.e - 'document.body.insertBefore(document.getElementById('idOfA'),document.getElementById('idOfB'));'其中idOfA和idOfB被這些元素的實際ID替換。 – enhzflep

回答

1

insertBefore需要兩個DOM元素作爲屬性,字符串。假設你要ID爲b元素前插入一個ID爲a的元素,你可以這樣做:

document.getElementById("B").parentNode.insertBefore(document.getElementById("A"), document.getElementById("B")); 
+0

我應該向@enhzflep道歉,基本上回答他在評論中添加的確切信息的問題,儘管我在發表評論之前就開始了我的回答。 :) –

+0

這至少改變了錯誤信息。現在,我得到「無法在'Node'上執行'insertBefore':之前插入新節點的節點不是該節點的子節點。」 – Tyshun

+0

http://stackoverflow.com/questions/3352871/using- JavaScript-insertbefore-to-insert-before-a-textnode –