2014-03-13 87 views
1

我希望你能帮助我,因为这让我疯狂!删除d3 svg元素进行重绘

所以我试图用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); 

    }); 

当我的更新函数被调用,然后我继续要删除的元素:

d3.select("#"+id+'_verticallinecontainer').remove(); 

这消除了容器和元素。然后我继续使用上面的代码重新绘制svg。

我的问题是,当它再次附加svg它做了两次,我不明白为什么!似乎d3以某种方式缓存了svg,并再次添加了它。

希望你能帮助清理出错的地方,任何帮助将不胜感激!

+0

有你试过'd3.select(svg).remove()'而不是? –

+0

应该svg是我想要删除的元素的名称? – Mkni1408

+0

不,变量'svg'。 –

回答

4

FIDDLE有一个快速添加,删除和添加一个SVG和一个包含的圆的例子。希望这可以帮助。

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"); 
} 
3

我有类似的问题。删除SVG元素并不能让我完全更新我想要的数据。

相反,我删除了SVG内创造了这一行摹元素:

充分说明和情况如下所示

d3.selectAll("g > *").remove() 

在我updateGraph()函数: Repainting/Refreshing Graph in D3