在HTML中,我可以使用以下命令清除<div>
元素:
div.innerHTML = "";
如果我有一个<svg>
元素,是否有等价物?我找不到innerHTML
或innerXML
甚至innerSVG
方法。
我知道SVG DOM是XML DOM的超集,所以我知道我可以这样做:
while (svg.lastChild) {
svg.removeChild(svg.lastChild);
}
但这既乏味又缓慢。是否有更快或更简单的方法来清除SVG元素?
答案 0 :(得分:38)
答案 1 :(得分:25)
您已经给出了一个答案:您可以随时循环遍历所有孩子并将其删除。如果您认为您有太多子节点,那么您可能希望用空的节点替换svg节点。如果你的svg节点有一些属性,你可以使用一个标签来放置所有的子节点,然后用空的节点替换它。
答案 2 :(得分:18)
使用d3.js.这将从svg。
中删除所有内容节点svg.selectAll("*").remove();
答案 3 :(得分:1)
您可以使用克隆并将该元素替换为克隆的元素。
var parentElement = svg.parentElement
var emptySvg = svg.cloneNode(false);
parentElement.removeChild(svg);
parentElement.appendChild(emptySvg);
这会将svg追加到最后, 你可能想要之前得到这个元素并附加方式
答案 4 :(得分:0)
答案 5 :(得分:0)
element = document.getElementById("elementID");
element.parentNode.removeChild(element);
我从http://www.carto.net/svg/manipulating_svg_with_dom_ecmascript/
得到了这个想法答案 6 :(得分:0)
我已经尝试了svg.text("")
,它似乎有效。清除所有内部文本,保留属性。
答案 7 :(得分:0)
如果您想保留我的svg的定义,请使用
function clear(prnt){
let children = prnt.children;
for (let i=0;i<children.length;){
let el = children[i];
if (el.tagName!=='defs'){
el.remove();
}else(i++);
}
}