D3:可以创建元素的子集,但不能更新它们

时间:2014-10-02 13:20:30

标签: d3.js selection

我有一个数据集,其中一个元素是另一个可变长度的数据集(让我们称之为" dataset2")。

我创建了一个复杂的情节:

var group = svg.selectAll('g').data(dataset)
var groupEnter = group.enter().append('g')

/* Add new elements */  
groupEnter.append('line')  
    ...  
groupEnter.append('polygon')  
    ...  
groupEnter.append('text')  
    ...  

/* Update elements */
group.select('line')  
    ...  
group.select('polygon')  
    ...  
group.select('text')  
    ...  

到目前为止一切顺利。

现在,我想添加代表" dataset2":

的多边形
var subGroup = group.selectAll('.someClass').data(function(d) { return d['dataset2'] })

var subGroupEnter = subGroup.enter().append('polygon')
    .attr('class', 'someClass')
    ...

这似乎有效;多边形被创建。

但是,我无法更新它们:

subGroup.selectAll('.someClass')
    ...

这没有效果。

如果我跑了

subGroup.selectAll('.someClass')
    .attr('...', function(d) { console.log(d); return ... })

没有输出。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

那是因为您实际上没有将someClass添加到子组中(至少在您显示的片段中)

也许

var subGroupEnter = subGroup.enter().append('polygon').classed('someClass', true)

或者类似的东西(很难用上面的片段更具体)