从DOM中删除重用节点

时间:2014-07-22 12:33:13

标签: javascript

我在过去几个小时内一直在努力解决这个问题,并决定为此进行stackoverflow。

我想清除body标签中的所有元素,除了1(这包括它的孩子)。

所以我认为我会做的是 1.将元素存储在变量中 2.清除身体标签 3.重新添加存储的元素。

但是,开发人员控制台会给我以下错误。

Uncaught NotFoundError: An attempt was made to reference a Node in a context where it does not exist.

我做错了什么?

此外,我不使用jQuery或任何其他框架,因此原生JavaScript将不胜感激。

var myBody = null;

var myNode = document.getElementsByTagName("body")[0];
while(myNode.lastChild) {
if(myNode.lastChild.id !== "c_container") {
    myNode.removeChild(myNode.lastChild);
}else{
    myBody = myNode.removeChild(myNode.lastChild);
}
}

myNode.appendChild(myBody);

HTML仅包含与主题相关的部分:

<body>
    <div id="wrapper">
        <div id="left_container">
            <div id="c_container">
                <!-- content -->
            </div>
        </div>
    </div>
</body>

2 个答案:

答案 0 :(得分:3)

您可以通过id获取要保存的元素。然后通过将其内容设置为""然后附加已保存的元素来清除正文。无需单独循环和删除节点。

var ele = document.getElementById("c_container");
document.body.innerHTML = "";
document.body.appendChild(ele);

jSFiddle

答案 1 :(得分:1)

我尝试使用in jsfiddle代码时你的代码工作的原因是你的“c_container”元素是里面你的代码将删除的元素。节点子节点的字符串就是起始点(主体,在您的情况下)正下方的DOM树的级别。你的循环只会进行一次迭代,删除包装器<div>元素。它永远不会看到你的“c_container”,因为它不是<body>标签的直接孩子。