我遇到了Javascript问题。我收到此错误消息:
Uncaught NotFoundError:无法在'Node'上执行'insertBefore':插入新节点的节点不是此节点的子节点。
使用Javascript:
var vidCounter = 0;
vidCounter++;
var originalDiv;
var newVideo = document.createElement("video");
newVideo.setAttribute("name", vidCounter);
newVideo.setAttribute("autoplay", "true");
originalDiv = document.getElementById("othersarea");
document.body.insertBefore(newVideo, originalDiv);
它正在尝试在名为<video>
的div中添加othersarea
标记。
<div id="remoteVideos">
<div class="title">
<h2>Others</h2>
</div>
<div id="othersarea">
</div>
</div>
我该如何解决这个问题?
我还想在我的新视频广告代码上投放attachMediaStream([VIDEO TAG HERE HOW?], event.stream);
。
答案 0 :(得分:21)
您必须在之前插入的元素的父元素上调用insertBefore
。 document.body
不是父级,它远在DOM层次结构中。
要在DIV之后插入,你必须在它的下一个兄弟之前插入。
var parentDiv = document.getElementById("remoteVideos");
parentDiv.insertBefore(newVideo, originalDiv.nextSibling);
请参阅MDN
中的示例答案 1 :(得分:13)
尝试使用 parentNode :
originalDiv.parentNode.insertBefore(newVideo, originalDiv);
这会将newVideo直接插入originalDiv。
前面原因是node.insertBefore(newNode, existingNode)
使用node
作为对existingNode
周围元素的引用。
参考:http://www.w3schools.com/jsref/met_node_insertbefore.asp
Google Analytics的功能也是如此: http://www.stevesouders.com/blog/2010/05/11/appendchild-vs-insertbefore/