--- title: Node.removeChild() slug: Web/API/Node/removeChild translation_of: Web/API/Node/removeChild ---
Node.removeChild() 方法從 DOM 移除一個子節點,並傳回移除的節點。
var oldChild = node.removeChild(child); 或 node.removeChild(child);
child 是 DOM 中想要移除的子節點。node 是 child 的父節點。oldChild 為將被移除的子節點參照,例如:oldChild === child.被刪除的子節點仍然存於記憶體之中,只是不在 DOM 了。從上述的第一種語法形式中,我們知道,透過引用 oldChild 還是可以在程式中重新使用已經被移除的子節點。
而第二種語法形式,因為沒有保留 oldChild 引用,因此假設你並沒有在其他地方保留節點引用,則它會立即無法使用且不可挽回,而且通常會在短時間內從內存管理中被自動刪除。
如果 child 並非某 element 節點的子元素,則此方法會拋出異常。而如果調用此方法時,child 雖是某 element 的子元素,但在嘗試刪除它的過程中已被其他事件處理程序刪除,也會拋出異常(例如 {{Event("blur")}})。
兩種不同的方式拋出異常:
如果 child 確實是 element 的子元素且確實存在於 DOM,但已被刪除,則會丟出以下異常:
Uncaught NotFoundError: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.
如果 child 不存在於頁面的 DOM,則會拋出下列的異常:
Uncaught TypeError: Failed to execute 'removeChild' on 'Node': parameter 1 is not of type 'Node'.
HTML:
<div id="top"> <div id="nested"></div> </div>
在知道父節點的情況下,刪除特定元素:
let d = document.getElementById("top");
let d_nested = document.getElementById("nested");
let throwawayNode = d.removeChild(d_nested);
沒有指定父節點的情況下,刪除特定元素:
let node = document.getElementById("nested");
if (node.parentNode) {
node.parentNode.removeChild(node);
}
從一個元素中移除所有子元素:
let element = document.getElementById("top");
while (element.firstChild) {
element.removeChild(element.firstChild);
}
<!--Sample HTML code-->
<div id="top"> </div>
<script type="text/javascript">
let top = document.getElementById("top");
let nested = document.getElementById("nested");
// Throws Uncaught TypeError
let garbage = top.removeChild(nested);
</script>
<!--Sample HTML code-->
<div id="top">
<div id="nested"></div>
</div>
<script type="text/javascript">
let top = document.getElementById("top");
let nested = document.getElementById("nested");
// This first call correctly removes the node
let garbage = top.removeChild(nested);
// Throws Uncaught NotFoundError
garbage = top.removeChild(nested);
</script>
{{Compat("api.Node.removeChild")}}