如何使用JavaScript删除HTML中的子节点?


75

有类似的功能document.getElementById("FirstDiv").clear()吗?


node.remove();是实现此目的的现代方法。document.getElementById("FirstDiv").remove();您的用例
Gibolt

Answers:


102

要回答最初的问题-有多种方法可以做到这一点,但以下是最简单的方法。

如果您已经有要删除的子节点的句柄,即您有一个包含对它的引用的JavaScript变量:

myChildNode.parentNode.removeChild(myChildNode);

显然,如果您不使用已经在执行此操作的众多库之一,则可能需要创建一个函数来抽象出这一点:

function removeElement(node) {
    node.parentNode.removeChild(node);
}

编辑:正如其他人提到的那样:如果您有任何事件处理程序连接到要删除的节点,您将要确保在最后一个对要删除的节点的引用超出范围之前断开它们的连接,以免执行不佳JavaScript解释器泄漏内存。


1
通过“糟糕的实现”。您是说IE6,IE7,IE8还是其他?(特别是,优秀的浏览器还会泄漏内存吗?我现在不再关心IE 6-7。)
Camilo Martin

@CamiloMartin-目前还不确定细节,但是据我所记得,“好的”浏览器应该监视并处理这些事情。YMMV
Jason Bunting

47

如果要清除div并删除所有子节点,则可以输入:

var mydiv = document.getElementById('FirstDiv');
while(mydiv.firstChild) {
  mydiv.removeChild(mydiv.firstChild);
}

11

现代解决方案- child.remove()

对于您的用例:

document.getElementById("FirstDiv").remove()

自2015年下半年以来,W3C一直推荐使用该版本,并且是vanilla JS。所有主要的浏览器都支持它。

Mozilla文件

支持的浏览器-2020年5月为96%


请编辑以表明“以前的方法”是什么,因为对问题进行投票/否决并予以删除,最终并没有明确的含义
Mark Schultheiss

3

您必须先删除在节点上设置的所有事件处理程序,然后再删除它,以避免IE中的内存泄漏


3

jQuery解决方案

的HTML

<select id="foo">
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
</select>

Java脚本

// remove child "option" element with a "value" attribute equal to "2"
$("#foo > option[value='2']").remove();

// remove all child "option" elements
$("#foo > option").remove();

参考文献:

属性等于选择器[名称=值]

选择具有指定属性且其值完全等于某个特定值的元素。

子选择器(“父>子”)

选择“父”指定的元素的“子”指定的所有直接子元素

。去掉()

与.empty()相似,.remove()方法将元素移出DOM。当我们想要删除元素本身以及其中的所有内容时,我们使用.remove()。除了元素本身之外,还删除了所有与元素相关联的绑定事件和jQuery数据。


2

使用以下代码:

//for Internet Explorer
document.getElementById("FirstDiv").removeNode(true);

//for other browsers
var fDiv = document.getElementById("FirstDiv");
fDiv.removeChild(fDiv.childNodes[0]); //first check on which node your required node exists, if it is on [0] use this, otherwise use where it exists.

1
    var p=document.getElementById('childId').parentNode;
    var c=document.getElementById('childId');
    p.removeChild(c);
    alert('Deleted');

p是父节点,c是子节点
parentNode是包含父引用的JavaScript变量,

易于理解


0

您应该能够使用节点的.RemoveNode方法或父节点的.RemoveChild方法。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.