Vanilla JavaScript 代码等价于 jQuery.empty()

jQuery 具有仅用于从另一个元素中删除子元素的功能。“empty()”方法可以直接在对象上使用。

考虑下面的 HTML 代码。

 1<!DOCTYPE html>
 2<html>
 3<head>
 4    <title>Lorem ipsum dolor sit amet</title>
 5</head>
 6<body>
 7    <div id="myDiv">
 8        <p>First paragraph</p>
 9        <p>Second paragraph</p>
10        <p>Third paragraph</p>
11        <p>Fourth paragraph</p>
12    </div>
13    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
14</body>
15</html>

要删除“myDiv”元素中的所有段落,只需在 jQuery 中使用以下代码。

1$("#myDiv").empty();

但是我们如何只使用 JavaScript 来执行同样的操作呢?

使用 JavaScript 从 DOM 节点中删除子元素

JavaScript 允许程序员通过各种属性从 DOM 节点中删除元素。让我们学习如何使用它们中的每一个来进行此删除。

innerHTML

这些属性之一是“innerHTML”。它允许替换所有元素的内部 HTML。包括被一个空字符串替换,使有问题的元素为空。

要删除“myDiv”元素内的所有子节点,请使用以下 JavaScript。

1document.getElementById("myDiv").innerHTML = "";

您可以在下面看到一个完整的 HTML 示例。这里我们使用一个按钮来移除元素。

 1<!DOCTYPE html>
 2<html>
 3<head>
 4    <title>Removing HTML elements using innerHTML</title>
 5    <meta charset="utf-8">
 6</head>
 7<body>
 8    <div id="myDiv" style="border: 3px dashed red; margin-bottom: 20px;">
 9        <p>First paragraph</p>
10        <p>Second paragraph</p>
11        <p>Third paragraph</p>
12        <p>Fourth paragraph</p>
13    </div>
14
15    <button id='removeElements'>Remove paragraphs (innerHTML)</button>
16
17    <script>
18        const button = document.getElementById("removeElements");
19        button.onclick = function () {
20            document.getElementById("myDiv").innerHTML = "";
21        };
22    </script>
23</body>
24</html>

textContent

“textContent”属性可用于将节点内的所有元素替换为空字符串。

根据浏览器的不同,使用“textContent”可能比“innerHTML”执行得更好。

1document.getElementById("myDiv").textContent = "";

使用循环删除子元素(“lastChild”)

在下面的示例中,我们使用“while”循环来检查我们的元素是否包含第一个子元素。如果为真,则表示父元素内至少有一个子元素,因此循环删除最后一个元素。并且重复该过程。

使用“lastChild”属性删除最后一个元素通常比使用“firstChild”属性删除第一个元素执行得更好。

1const element = document.getElementById("myDiv");
2while (element.firstChild) {
3    element.removeChild(element.lastChild);
4}

使用循环删除子元素(“lastElementChild”)

在这里,我们将获得相同的结果,但保留“非元素”,例如文本节点“#text”和注释“<!– comments –>”。

1const element = document.getElementById("myDiv");
2while (element.firstChild) {
3    element.removeChild(element.lastElementChild);
4}

“lastElementChild”的另一个特性是在父元素中保留不是直接后代的子节点。

例如,考虑以下元素的结构。

1Parent element
2|
3 — First node
4|  |
5|   — Node 1
6|  |
7|   — Node 2
8|
9 — Second node

使用“lastElementChild”时,“First node”和“Second node”将被删除。“Node 1”和“Node 2”不会被删除。

使用“remove”方法删除子元素

1const element = document.getElementById("myDiv");
2while (element.firstChild) {
3    element.lastChild.remove();
4}

ES5 中添加了“remove”功能。它具有更简单和更直接的链接语法。它已经在许多浏览器中得到了很好的支持

使用“replaceChildren”方法删除元素

还可以使用“replaceChildren”API 从 DOM 节点中删除子元素。此方法不仅允许您从父元素中删除元素,还可以在一次操作中将它们替换为其他元素。

要仅删除子元素,请在不带任何参数的情况下调用 API。

1const element = document.getElementById("myDiv");
2element.replaceChildren();

现代浏览器已经很好地支持 “replaceChildren”API 。