当使用标准JavaScript删除一个元素时,你必须先去它的父元素:
var element = document.getElementById("element-id");
element.parentNode.removeChild(element);
必须先访问父节点对我来说似乎有点奇怪,这是JavaScript这样工作的原因吗?
当使用标准JavaScript删除一个元素时,你必须先去它的父元素:
var element = document.getElementById("element-id");
element.parentNode.removeChild(element);
必须先访问父节点对我来说似乎有点奇怪,这是JavaScript这样工作的原因吗?
当前回答
更新2011
这是在2011年添加到DOM规范中的,所以你可以使用:
element.remove()
DOM组织在一个节点树中,其中每个节点都有一个值,以及对其子节点的引用列表。因此,element. parentnode . removechild (element)准确地模拟了内部发生的情况:首先访问父节点,然后删除对子节点的引用。
从DOM4开始,提供了一个辅助函数来做同样的事情:element.remove()。这在96%的浏览器(截至2020年)中有效,但不包括IE 11。
如果你需要支持旧的浏览器,你可以:
通过父节点删除元素 修改本机DOM函数,如Johan Dettmar的回答,或者 使用DOM4填充材料。
其他回答
这就是DOM所支持的。在该页面中搜索“remove”或“delete”,removeChild是唯一删除节点的。
ChildNode.remove()方法将对象从它所属的树中移除。
https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
下面是一个演示如何调用document.getElementById('my-id').remove()的示例。
https://jsfiddle.net/52kp584L/
**
不需要扩展NodeList。它已经实施了。
**
必须先访问父节点对我来说似乎有点奇怪,这是JavaScript这样工作的原因吗?
函数名是removeChild(),当没有父对象时如何可能删除子对象?:)
另一方面,您不必总是像您所显示的那样调用它。元素。parentNode只是一个获取给定节点的父节点的助手。如果你已经知道父节点,你可以像这样使用它:
Ex:
// Removing a specified element when knowing its parent node
var d = document.getElementById("top");
var d_nested = document.getElementById("nested");
var throwawayNode = d.removeChild(d_nested);
https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
补充一些东西:
一些回答指出,可以使用element .remove();而不是使用parentnode . removecchild (child);。但正如我所注意到的,这两个功能之间有区别,在那些答案中没有提到。
如果使用removeChild(),它将返回对已删除节点的引用。
var removedChild = element.parentNode.removeChild(element);
console.log(removedChild); //will print the removed child.
但是如果你使用element .remove();,它不会返回给你引用。
var el = document.getElementById('Example');
var removedChild = el.remove(); //undefined
https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
这种行为可以在Chrome和FF中观察到。我相信这值得注意:)
希望我的回答能对这个问题有所帮助!!
你可以使用element。remove()
这是在没有脚本错误的情况下删除元素的最佳函数:
function Remove(EId)
{
return(EObj=document.getElementById(EId))?EObj.parentNode.removeChild(EObj):false;
}
注意EObj=document.getElementById(EId)。
这是一个等号,不是==。
如果元素id存在,则函数将其删除,否则返回false,而不是error。