我认为标题是不言自明的。
让我们说我输入这样的div并使用每个div创建一个单独的输入级联:
var rects = g.selectAll("rect").data(data);
rects.enter()
.append("rect")
.attr("width","100px")
.attr("height","100px")
.attr("y",function(d,i){ return margin.top + (i * spacing) + "px"})
.attr("x",margin.left + "px")
.attr("fill", function(d) { return "d.color" }
.each(function(d,i){
var that = d3.select(this)
that.selectAll('circle.timelinefeatures')
.data(allevents)
.enter()
.append('circle')
.attr('class',"timelinecircles")
});
这是正确的做法吗?
答案 0 :(得分:3)
我认为来自d3的selection.data(values, key)
API参考的这个例子说明了这一点:
values 数组指定选择中每个组的数据。因此,如果选择具有多个组(例如d3.selectAll后跟selection.selectAll),则应将数据指定为返回数组的函数(假设您希望每个组使用不同的数据) 。该函数将传递当前组数据(或
undefined
)和索引,并将该组作为this
上下文。例如,您可以将二维数组绑定到初始选择,然后将包含的内部数组绑定到每个子选择。在这种情况下,values函数是identity函数:它为每个子元素组调用,传递绑定到父元素的数据,并返回该数据数组。
var matrix = [
[11975, 5871, 8916, 2868],
[ 1951, 10048, 2060, 6171],
[ 8010, 16145, 8090, 8045],
[ 1013, 990, 940, 6907]
];
var tr = d3.select("body").append("table").selectAll("tr")
.data(matrix)
.enter().append("tr");
var td = tr.selectAll("td")
.data(function(d) { return d; })
.enter().append("td")
.text(function(d) { return d; });
另请参阅:https://github.com/mbostock/d3/wiki/Selections#selectAll
var rects = g.selectAll("rect").data(data);
rects.enter().append("rect");
var tf = rects.selectAll('circle.timelinefeatures').data(function(d, i) {
return d;
});
tf.enter().append('circle').attr('class', 'timelinefeatures');