在d3.js v4中,嵌套选择似乎不像过去那样有效。
这适用于(第3版):
var data = [["1-a", "1-b"], ["2-a", "2-b"]];
var tbody = d3.select("tbody");
var row = tbody.selectAll("tr").data(data);
row.exit().remove();
row.enter().append("tr");
var cell = row.selectAll("td").data(function(d){ return d;});
cell.exit().remove();
cell.enter().append("td");
cell.text(function(d){ return d; });
https://jsfiddle.net/nwozjscs/
但不是在第4节:https://jsfiddle.net/nwozjscs/1/
我的感觉是这与 merge(...)更改有关,但我无法找到编写嵌套选择的正确方法的示例V4。
答案 0 :(得分:2)
我想我明白了。如果在加入下一层数据之前将输入和更新选择合并到一个选择中,它似乎可以正常工作。这样,任何新数据以及顶级的任何现有数据都将在下一级别被正确考虑。
如果你仔细想想,这就完全有道理了。我想我已经习惯了v3的魔力来看明显的。
如果有更好的方法,请评论!
https://jsfiddle.net/nwozjscs/2/
function render(data){
var tbody = d3.select("tbody");
var row = tbody.selectAll("tr").data(data);
var rowenter = row.enter().append("tr");
var cell = row.merge(rowenter)
.selectAll("td").data(function(d){ return d;});
cell.enter().append("td").text(function(d){ return d; });
}
render([["1-a", "1-b"], ["2-a", "2-b"]]);
setTimeout(function(){
render([["1-a", "1-b", "1-c"], ["2-a", "2-b", "2-c"], ["3-a", "3-b", "3-c"]]);
}, 2000);