我有一個線條圖,默認情況下,我需要僅顯示元素的子集,然後在下拉事件中顯示不同的子集。D3:數據集更新不會刪除DOM中的元素
這裏是初始代碼:
varlines = svg.append("g")
.attr('id', 'lines')
.selectAll('g')
.data(datum.filter(function(d) {
return d.group == 'default'
}),
function(d) {
return d.name
}
).enter()
.append("g")
.attr("class", 'varline')
.append("path")
.attr("class", "line")
.attr("id", function(d) {
return 'line_' + d.name
})
.attr("d", function(d) {
return line(d.datum);
});
,它工作正常。 現在,這裏是指更新我的選擇代碼:
$('.dropdown-menu a').click(function(d) {
var g = this.text;
dd.select("button").text(g) // switch header
var newdata = datum.filter(function(d) {
return d.group == g
}); # datalines for selected group
varlines.data(newdata, function(d) { return d.name })
.enter()
.merge(varlines)
.append("g")
.attr("class", 'varline')
.attr("id", function(d) {
return 'line_' + d.name
})
.append("path")
.attr("class", "line")
.attr("d", function(d) {
return line(d.datum);
});
varlines.exit().remove()
和它的作品怪異。雖然它增加了東西並且不重複dom元素,但它不會刪除舊元素。
此外,當我console.log(varlines);
在任何步驟,它示出了只有兩個_groups
陣列初始元素,並且沒有_enter
和_exit
性能,即使是具有在SVG 3行。
我使用d3v4,jquery3.1.1.slim
謝謝,這是有道理的。但是,由於某種原因,它並沒有太大變化......(請參閱下面的評論)。 –
@Philipp_Kats在輸入選擇上調用'exit'顯然是你的問題。如果更改不起作用,這意味着您在某個地方有*另一個*問題。在這種情況下,別人可以幫助你的唯一方法就是如果你設置了一個**運行**代碼(bl.ocks,fiddle,plunker或其他),所以我們可以檢查發生了什麼。 –
夠公平的。這裏是關於plunker的現場演示:https://embed.plnkr.co/ZASbDzKUvZ0ATIGmSYZA/ –