这里是我的代码 - http://jsfiddle.net/kiniadit/dsmxtonL/D3.js - DOM文本退出错误
特定代码 -
var labels = svg.selectAll("text").data(dataset)
//Enter…
labels.enter()
.append("text")
.text(function(d) {
return d;
})
.attr("text-anchor", "middle")
.attr("x", w)
.attr("y", function(d) {
return h - yScale(d) + 14;
})
.attr("font-family", "sans-serif")
.attr("font-size", "11px")
.attr("fill", "black");
//Update…
labels
.attr("x", function(d, i) {
return xScale(i) + xScale.rangeBand()/2;
});
//Exit…
labels.exit()
.remove();
我无法正确删除SVG的文本元素,当我点击“删除数据值”段。其他DOM元素(svg rects)按照它们应该退出的方式退出,但svg文本元素以奇怪的方式被删除 - 最后一个数据值(而不是第一个)被删除。
此代码几乎是Scott Murray的书的http://examples.oreilly.com/0636920026938/chapter_09/29_dynamic_labels.html的精确副本,只是我使用常规数组而不是键值对象。
请让我知道我错过了什么。谢谢!
默认情况下,'.data()'会尝试通过索引来匹配数据中的每个元素与选择中的每个元素。因此,如果数据中的元素数量与选择中的数量相同,则不会创建“enter”或“exit”选择。 – Wex 2014-11-21 06:37:02
明白了。这就是作者为什么使用密钥的原因。谢谢澄清。 – user3588841 2014-11-21 18:43:23