如何在 JavaScript 中删除 DOM 节点的所有子元素

有多种方法可以使用 JavaScript 删除 DOM 节点的所有子元素。

innerHTML

清除 innerHTML 很简单,但是,它可能不适合高性能应用程序,因为它会调用浏览器的 HTML 解析器:

<!DOCTYPE html>
<html>
  <head>
    <title>文档的标题</title>
    <script src="https://code.jquery.com/jquery-3.5.0.min.js"></script>
    <style>
      #divId {
        height: 100px;
        width: 200px;
        border: 1px solid red;
      }
    </style>
  </head>
  <body>
    <div id='divId'>
      <span>Welcome to onitroad</span>
    </div>
    <button id='buttonId'>Remove via innerHTML</button>
    <script>
      buttonId.onclick = () => {
        const myNode = document.getElementById("divId");
        myNode.innerHTML = '';
      }
    </script>
  </body>
</html>

textContent

第二种方法是清除 textContent。
它类似于上面的方法。
这种方法比innerHTML 快得多。
使用 textContent 浏览器不会调用 HTML 解析器并立即用单个 #text 节点替换元素的所有子元素:

<!DOCTYPE html>
<html>
  <head>
    <title>文档的标题</title>
    <script src="https://code.jquery.com/jquery-3.5.0.min.js"></script>
    <style>
      #divId {
        height: 100px;
        width: 200px;
        border: 1px solid red;
      }
    </style>
  </head>
  <body>
    <div id='divId'>
      <span>Welcome to onitroad</span>
    </div>
    <button id='buttonId'>通过textContent删除元素</button>
    <script>
      buttonId.onclick = () => {
        const myNode = document.getElementById("divId");
        myNode.textContent = '';
      }
    </script>
  </body>
</html>

lastChild

不是删除 firstChild,而是使用 lastChild,它可以更快地删除最后一个元素。
循环将检查 firstChild 以防检查 firstChild 比 lastChild 更快:

<!DOCTYPE html>
<html>
  <head>
    <title>文档的标题</title>
    <script src="https://code.jquery.com/jquery-3.5.0.min.js"></script>
    <style>
      #divId {
        height: 100px;
        width: 200px;
        border: 1px solid red;
      }
    </style>
  </head>
  <body>
    <div id='divId'>
      <span>Welcome to onitroad</span>
    </div>
    <button id='buttonId'>通过最后一个子元素循环删除</button>
    <script>
      buttonId.onclick = () => {
        const myNode = document.getElementById("divId");
        while(myNode.firstChild) {
          myNode.removeChild(myNode.lastChild);
        }
      }
    </script>
  </body>
</html>

lastElementChild

循环删除每个 lastElementChild 方法会保留所有非元素,(例如 #text 节点和 <!-comments →)父级(不是后代)的子级:

<!DOCTYPE html>
<html>
  <head>
    <title>文档的标题</title>
    <script src="https://code.jquery.com/jquery-3.5.0.min.js"></script>
  </head>
  <body>
    <div id='divId' style="height: 100px; width: 200px; border: 1px solid red;">
      <!-- This comment won't be removed -->
      <span>
        Welcome to onitroad <!-- This comment WILL be removed -->
      </span>
      <!-- But this one won't. -->
    </div>
    <button id='buttonId'>Remove via lastElementChild-loop</button>
    <script>
      buttonId.onclick = () => {
        const myNode = document.getElementById("divId");
        while(myNode.lastElementChild) {
          myNode.removeChild(myNode.lastElementChild);
        }
      }
    </script>
  </body>
</html>

DOM 节点

文档对象模型 (DOM) 是一种表示 HTML 和 XML 文档的编程接口的方式。

DOM 表示在逻辑树中说明的文档,其中每个分支都以一个节点结束,并且这些节点中的每一个都包含对象。
每个节点都可以引用其他节点,子节点。
他们也可以有自己的孩子。

日期:2020-06-02 22:16:24 来源:oir作者:oir