我在过去几个小时内一直在努力解决这个问题,并决定为此进行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>
答案 0 :(得分:3)
您可以通过id获取要保存的元素。然后通过将其内容设置为""
然后附加已保存的元素来清除正文。无需单独循环和删除节点。
var ele = document.getElementById("c_container");
document.body.innerHTML = "";
document.body.appendChild(ele);
答案 1 :(得分:1)
我尝试使用in jsfiddle代码时你的代码工作的原因是你的“c_container”元素是里面你的代码将删除的元素。节点子节点的字符串就是起始点(主体,在您的情况下)正下方的DOM树的级别。你的循环只会进行一次迭代,删除包装器<div>
元素。它永远不会看到你的“c_container”,因为它不是<body>
标签的直接孩子。