document.insertBefore抛出错误

时间:2010-10-28 13:24:25

标签: javascript

我有这段代码:

  <textarea id="test" style="width: 400px; height: 100px"></textarea>
  <script>
    var inserting = document.createElement("div");
    document.insertBefore(inserting,document.getElementById("test"));
  </script>

哪个应在DIV id=inserting之前插入textarea id=test,但会发生此错误

Node was not found" code: "8

我在WinXP上使用带Firebug的FireFox 3.6。问题在哪里?

4 个答案:

答案 0 :(得分:10)

insertBefore需要调用插入之前元素的父元素:

<textarea id="test" style="width: 400px; height: 100px"></textarea>
  <script>
    var inserting = document.createElement("div");
    var insertAt = document.getElementById("test");
    insertAt.parentNode.insertBefore(inserting,insertAt);
  </script>

答案 1 :(得分:3)

需要在DOM节点上调用

.insertBefore()document不是DOM节点。尝试使用textarea的父节点。

答案 2 :(得分:2)

正如其他人所提到的,您需要在insertBefore节点的父节点上调用<textarea>。根据{{​​3}}的API文档:

  

摘要

     

在引用元素之前插入指定节点作为当前节点的子节点。

     

语法

     

var insertedElement = parentElement.insertBefore(newElement, referenceElement);

     

如果referenceElement为null,则在子节点列表的末尾插入newElement。

     
      
  • insertedElement正在插入的节点,即newElement
  •   
  • parentElement 新插入节点的父级。
  •   
  • newElement要插入的节点。
  •   
  • referenceElement插入newElement的节点。
  •   

所以你想说一句:

parent_element_goes_here.insertBefore(inserting,document.getElementById("test"));

而不是:

document.insertBefore(inserting,document.getElementById("test"));

<小时/> 此外,您的代码可能在DOM加载完成之前执行。您可以使用Node.insertBefore事件处理程序确保加载所有DOM元素。来自MDC文档:

  

加载事件在文档加载过程结束时触发。此时,文档中的所有对象都在DOM中,并且所有图像和子帧都已完成加载。

因此,您不必直接调用代码,而是执行此操作:

window.onload=function(){
    ...
}

答案 3 :(得分:-1)

您希望将节点添加到document.body而不是document

document.body.insertBefore(inserting, document.getElementById("test"));