如何在 JavaScript 中刪除 DOM 節點的所有子元素?


假設您正在構建一個管理日常任務資料的 Web 應用程式,使用者插入任務,並形成一個任務列表。但在某個時間點,使用者希望從列表中刪除所有任務,並希望使列表為空。因此,作為開發人員,您應該知道如何從DOM節點中刪除所有子元素。

要從 DOM 節點中刪除所有元素,我們有以下方法。

  • 透過迭代 DOM 節點並使用 removeChild 方法。
  • 透過將 innerHTML 值擦除為空字串。
  • 透過使用 jQuery 的 empty() 方法。
  • 使用 replaceChildren() 方法。

透過迭代 DOM 節點並使用 removeChild 方法

在這種方法中,我們將使用while迴圈或for迴圈迭代 DOM。在每次迭代中,我們將使用 nodeObject.hasChildNodes() 方法或 nodeObject.childElementCount 屬性檢查節點中是否還有剩餘的元素,如果節點中存在任何元素,我們只需使用 nodeObject.removeChild() 方法將其刪除,並將第一個節點作為引數傳遞。

語法

parentElement.hasChildNodes()

parentElement.removeChild(parentElement.firstChild)

這裡parentElement.hasChildNodes()將檢查 DOM 節點中是否存在任何元素。parentElement.removeChild(parentElement.firstChild)刪除 DOM 節點的第一個子節點。

演算法

  • 步驟 1 - 遍歷所有 DOM 節點。要遍歷所有節點,您可以使用任何迴圈,例如 for 或 while 迴圈。

  • 步驟 2 - 在每次迭代中,我們檢查父節點中是否存在任何子節點。

  • 步驟 3 - 如果存在任何子節點,我們使用 removeChild() 方法將其刪除。

示例 1

使用 reomveChild() 方法刪除所有子元素

在下面的示例中,我們使用 removeChild() 方法刪除 DOM 節點的所有子元素。我們使用 while 迴圈迭代所有子節點。首先,我們使用 hasChildNodes() 方法檢查子元素是否存在。

<!DOCTYPE html>
<html>
<head>
   <title>Code Result</title>
</head>
<body>
   <h2>Removing All Child Elements using removeChild() Method </h2>
   <p> Click "Remove Child" to remove all child button elements. </p>
   <button id="btn">Remove Child</button>
   <br><br><br>
   <div id="parent" style="border:1px solid; padding: 10px; display: inline;">
   <button id="child">First</button>
   <button id="child">Second</button>
   <button id="child">Third</button>
   <button id="child">Fourth</button>
      </div>
      <script>
         let btn = document.getElementById("btn");
         let parent = document.getElementById("parent")
         btn.addEventListener("click", () => {
               while (parent.hasChildNodes())
               parent.removeChild(parent.firstChild)
               }
            );
      </script>
</body>
</html>

示例 2

使用 nodeObject.remove() 方法刪除所有子元素

在下面的示例中,我們使用nodeObject.remove()方法刪除 DOM 節點的所有子元素。我們使用 while 迴圈迭代所有子節點。首先,我們使用 hasChildNodes() 方法檢查子元素是否存在。

<!DOCTYPE html>
<html>
<body>
   <h2>Removing All Child Elements using remove() Method </h2>
   <p> Click "Remove Child" to remove all child button elements. <p>
   <button id="btn">Remove Child</button>
   <br><br><br>
   <div id="parent" style="border:1px solid; padding: 10px; display: inline;">
   <button id="child">First</button>
   <button id="child">Second</button>
   <button id="child">Third</button>
   <button id="child">Fourth</button>
      </div>
      <script>
         let btn = document.getElementById("btn");
         let parent = document.getElementById("parent")
         btn.addEventListener("click", () => {
            while (parent.hasChildNodes())
            parent.firstChild.remove()
            }
         );
      </script>
</body>
</html>

透過擦除 innerHTML 值

在這種方法中,我們將空字串或 null 分配給 object.innerHTML。雖然這種方法看起來很簡單,但也有一些缺點。第一個是,如果父元素內部有 SVG,它不會刪除該 SVG。第二個是,它被認為非常慢,因為當您將 null 或空字串分配給 innerHTML 時,DOM 會從表面移除,但瀏覽器會保留子元素,這會使整體效能變慢。

語法

parent.innerHTML = null
or
parent.innerHTML = ""

這裡parent是要從中刪除子元素的父 DOM 節點。

示例

<html>
<body>
   <h2>Removing All Child Elements by assigning parent.innerHTML value to null</h2>
   <p> Click "Remove Child" to remove all child button elements. <p>
   <button id="btn">Remove Child</button>
   <br><br><br>
   <div id="parent" style="border:1px solid; padding: 10px; display: inline;">
      <button id="child">First</button>
      <button id="child">Second</button>
      <button id="child">Third</button>
      <button id="child">Fourth</button>
   </div>
   <script>
      let btn = document.getElementById("btn");
      let parent = document.getElementById("parent")
      btn.addEventListener("click", () => {
         parent.innerHTML = null
      });
   </script>
</body>
</html>

透過使用 jQuery 的 empty() 方法

jQuery 的 empty() 方法會刪除一組匹配元素的所有子節點。我們使用選擇出父 DOM 元素,並在其上應用 empty() 方法。

語法

$(parentNode).empty();

示例

<html>
<body>
   <h2>Removing All Child Elements using jQuery’s empty() Method </h2>
   <p> Click "Remove Child" to remove all child button elements. <p>
   <button id="btn">Remove Child</button>
   <br><br><br>
   <div id="parent" style="border:1px solid; padding: 10px; display: inline;">
      <button id="child">First</button>
      <button id="child">Second</button>
      <button id="child">Third</button>
      <button id="child">Fourth</button>
   </div>
   <script>
      let btn = document.getElementById("btn");
      let parent = document.getElementById("parent")
      btn.addEventListener("click", () => {
         $("#parent").empty()
      });
   </script>
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</body>
</html>

透過使用 replaceChildren() 方法

replaceChildren()方法用於用一組新的元素替換 DOM 節點的舊元素。此方法將節點元素作為引數,並按與引數相同的順序替換 DOM 元素。如果您不輸入任何引數,則它只會將舊元素替換為 null,這意味著舊元素將被刪除。

語法

parentElement.replaceElement();

這裡parentElement是要從中刪除子元素的 DOM 節點。

示例

<html>
<body>
   <h2>Removing All Child Elements using replaceElement() Method </h2>
   <p> Click "Remove Child" to remove all child button elements. <p>
   <button id="btn">Remove Child</button>
   <br><br><br>
   <div id="parent" style="border:1px solid; padding: 10px; display: inline;">
      <button id="child">First</button>
      <button id="child">Second</button>
      <button id="child">Third</button>
      <button id="child">Fourth</button>
   </div>
   <script>
      let btn = document.getElementById("btn");
      let parent = document.getElementById("parent")
      btn.addEventListener("click", () => {
         parent.replaceChildren()
      });
   </script>
</body>
</html>

我們討論了四種在 JavaScript 中刪除 DOM 節點所有子元素的方法。您可以根據需要使用其中任何一種。我們建議您使用第一種方法或第四種方法。如果您使用 jQuery,則使用第三種方法,我們不建議您在構建複雜 UI 時使用第二種方法,因為它會使網頁變慢。

更新於: 2022-08-11

12K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.