我有这段代码:
<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。问题在哪里?
答案 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)
.insertBefore()
。 document
不是DOM节点。尝试使用textarea的父节点。
答案 2 :(得分:2)
正如其他人所提到的,您需要在insertBefore
节点的父节点上调用<textarea>
。根据{{3}}的API文档:
摘要
在引用元素之前插入指定节点作为当前节点的子节点。
语法
var insertedElement = parentElement.insertBefore(newElement, referenceElement);
如果referenceElement为null,则在子节点列表的末尾插入newElement。
insertedElement
正在插入的节点,即newElementparentElement
新插入节点的父级。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"));