Javascript 有没有一种简单的方法可以清除SVG元素';什么内容?

Javascript 有没有一种简单的方法可以清除SVG元素';什么内容?,javascript,xml,dom,svg,Javascript,Xml,Dom,Svg,在HTML中,我可以使用以下命令清除元素: div.innerHTML = ""; 如果我有一个元素,是否有一个等价物?我找不到innerHTML或innerXML甚至innerSVG方法 我知道SVG DOM是XML DOM的超集,所以我知道我可以这样做: while (svg.lastChild) { svg.removeChild(svg.lastChild); } 但这既单调又缓慢。有没有更快或更简单的方法来清除SVG元素?使用此方法 还有拉斐尔: 我很想仔细研究一下,看看他

在HTML中,我可以使用以下命令清除
元素:

div.innerHTML = "";
如果我有一个
元素,是否有一个等价物?我找不到
innerHTML
innerXML
甚至
innerSVG
方法

我知道SVG DOM是XML DOM的超集,所以我知道我可以这样做:

while (svg.lastChild) {
    svg.removeChild(svg.lastChild);
}
但这既单调又缓慢。有没有更快或更简单的方法来清除SVG元素?

使用此方法

还有拉斐尔:


我很想仔细研究一下,看看他们在用
.destroy()
方法做什么。

你已经给出了一个答案:你可以循环所有的孩子,然后把他们移除。如果您认为子节点太多,那么可能需要将svg节点替换为空节点。如果svg节点具有某些属性,则可以使用标记放置所有子节点,然后用空节点替换该节点

element = document.getElementById("elementID");
element.parentNode.removeChild(element);

我是从

中得到这个想法的,如果您使用jQuery,您可以这样做

$("#svgid").empty();

这是svg的一部分,同时它的其他属性(如宽度和高度)保持不变。

我尝试了
svg.text(“”)
,它似乎可以工作。清除所有内部文本,保留属性。

使用d3.js。这将从svg中删除所有内容节点

svg.selectAll("*").remove();

您可以使用克隆并用克隆的元素替换该元素

    var parentElement = svg.parentElement
    var emptySvg = svg.cloneNode(false);
    parentElement.removeChild(svg);
    parentElement.appendChild(emptySvg);
这将在末尾附加svg,
您可能希望在之前获取元素并相应地追加

我同意使用克隆并用克隆的元素替换该元素

    var parentElement = svg.parentElement
    var emptySvg = svg.cloneNode(false);
    parentElement.removeChild(svg);
    parentElement.appendChild(emptySvg);
只有一行代码:

svg.parentNode.replaceChild(svg.cloneNode(false), svg);

如果您想让svg的def保持在我的状态,请使用以下命令

功能清除(prnt){
let children=prnt.children;

对于(让i=0;我看起来就像他们在做Aseem一样:paperproto.clear=function(){var c=this.canvas;而(c.firstChild){c.removeChild(c.firstChild);}这将删除元素本身,而不仅仅是清空它,但确实对SVG有效。删除整个元素“有效”如何?这不是问题所在。这正是我想要的。删除标记:(在john ktejik的commnet上展开。使用empty()清除所有定义。使用循环仅清除与已删除的子元素特定关联的定义。必须在
svg.html(null)上使用此选项
让它与IE 11一起工作。谢谢。请注意,
svg
变量这里是一个d3选择,而不是问题中的SVGSVGElement对象。它可能是用
d3.select(svg)修复的。selectAll(“*”).remove();
如果其中有现有的DEF怎么办?将您的DEF从该元素中删除。