d3.js中没有发生数据级联

时间:2016-12-22 11:19:01

标签: javascript d3.js svg

为什么我没有在这里获取日志?我在父项中附加数据,正在创建的子组应该继承它,对吗?

这里我正在创建一个新的SVG组,并附加数据,对于每个数据单元,我想要创建一个组。请帮我找到我失踪的地方?

代码::

var svg = d3.select('body')
.append('svg')
.attr('width', 600)
.attr('height', 300)
.data([[20,30],[40,50]]);

var g = svg
.selectAll('g')
.enter()
.append('g');

g.each(function (d, i) {
  console.log(d, i)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.4.0/d3.js"></script>

1 个答案:

答案 0 :(得分:2)

  

我在父级中附加数据,正在创建的子组应该继承它,对吗?

他们确实继承了。您可以将数据添加到SVG并根据它获取您的群组,这不是问题所在。这里的问题只有两件事:

首先,对于你想要的结果(&#34;第一个g应该有[20,30],第二个g应该有[40,50]&#34; ),这应该是数据:

.data([[[20,30],[40,50]]]);

其次,您必须引用父级的数据来创建<g> s:

.data(d => d)

以下是演示:

&#13;
&#13;
var svg = d3.select('body')
    .append('svg')
    .attr('width', 600)
    .attr('height', 300)
    .data([[[20, 30],[40, 50]]]);

var g = svg
    .selectAll('.g')
    .data(d => d)
    .enter()
    .append('g');

g.each(function(d,i) {
    console.log(d,i)
})
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
&#13;
&#13;
&#13;