![](/img/trans.png)
[英]Is there a way to detect when a DOM node is about to be removed from the DOM?
[英]Reuse node removed from DOM
我在最近的幾個小時內一直在努力解決這個問題,並決定為此進行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>
您可以通過id獲取要保存的元素。 然后通過將其內容設置為""
清除正文,然后附加已保存的元素。 無需單獨循環和刪除節點。
var ele = document.getElementById("c_container");
document.body.innerHTML = "";
document.body.appendChild(ele);
當我在jsfiddle中嘗試但對您不起作用時,您的代碼起作用的原因是,您的“ c_container”元素位於將要刪除的元素內 。 子節點的字符串只是緊靠起點(在您的情況下為主體)下方的DOM樹的級別。 您的循環只會進行一次迭代,因此將刪除包裝<div>
元素。 它永遠不會看到您的“ c_container”,因為它不是<body>
標記的直接子代。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.