假设您有一些选择与一些数据绑定,您使用典型的在线匿名函数来访问该数据:
d3.select("#whatever").each(function(d,i,q) {console.log(d,q)})
我们都知道第一个变量是数据,第二个是数组位置.但是第三个变量(q在这种情况下)代表什么?到目前为止,我测试的所有东西总是回到零.
解决方法
秘密的第三个参数只有当你有
nested selections时才使用.在这些情况下,它保存了父数据元素的索引.例如考虑这个代码.
var sel = d3.selectAll("foo").data(data).enter().append("foo"); var subsel = sel.selectAll("bar").data(function(d) { return d; }).enter().append("bar");
假设数据是一个嵌套的结构,你现在可以这样做了.
subsel.attr("foobar",function(d,i) { console.log(d,i); });
这并不奇怪,将数据项记录在嵌套及其索引中.但你也可以这样做.
subsel.attr("foobar",j) { console.log(d,j); });
这里d和i仍然是指相同的东西,但是j指的是父数据元素的索引,即foo元素的索引.