我希望你能帮助我,因为这快把我逼疯了!
所以我试着用d3重新绘制一个svg。在我的代码中,我使用以下命令添加svg:
d3.xml("Images/vertical_line.svg", "image/svg+xml", function(xml) {
var importedNode = document.importNode(xml.documentElement, true);
var svg = d3.select('#'+id+'_verticallinecontainer').node().appendChild(importedNode);
});
当我的update函数被调用时,我继续删除元素:
d3.select("#"+id+'_verticallinecontainer').remove();
这将删除容器和元素。然后,我使用上面的代码再次重新绘制svg。
我的问题是,当它再次附加svg时,它会执行两次,我不明白为什么!似乎d3以某种方式缓存了svg,并重新添加了它。
希望你能帮我解决问题,任何帮助都将不胜感激!
发布于 2014-03-13 16:34:23
用一个简单的例子添加,删除和再次添加一个FIDDLE和一个包含的圆。希望这能有所帮助。
function update() {
svg.remove();
svg = d3.selectAll("body").append("svg");
svg.append("circle")
.attr("cx",40)
.attr("cy",40)
.attr("r",20)
.style("fill","blue");
}
发布于 2017-03-10 15:26:07
我也遇到过类似的问题。删除SVG元素并不能让我完全更新数据。
相反,我使用下面的代码行删除了在SVG中创建的g元素:
d3.selectAll("g > *").remove()
在updateGraph()函数中
完整的解释和情况显示在这里:Repainting/Refreshing Graph in D3
https://stackoverflow.com/questions/22382984
复制相似问题