2014-04-29 18 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 –