簡體   English   中英

重用節點已從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

當我在jsfiddle中嘗試但對您不起作用時,您的代碼起作用的原因是,您的“ c_container”元素位於將要刪除的元素 子節點的字符串只是緊靠起點(在您的情況下為主體)下方的DOM樹的級別。 您的循環只會進行一次迭代,因此將刪除包裝<div>元素。 它永遠不會看到您的“ c_container”,因為它不是<body>標記的直接子代。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM