Uncaught NotFoundError:无法在'Node'上执行'insertBefore':插入新节点的节点不是此节点的子节点

时间:2014-05-01 03:37:33

标签: javascript jquery

我遇到了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);

2 个答案:

答案 0 :(得分:21)

您必须在之前插入的元素的父元素上调用insertBeforedocument.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/