【发布时间】:2014-11-21 02:23:17
【问题描述】:
这是我的代码 - http://jsfiddle.net/kiniadit/dsmxtonL/
具体代码——
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选择。 -
知道了。所以这就是作者使用密钥的原因。感谢您的澄清。
标签: javascript html svg d3.js bar-chart