在我的d3图表中,我有时使用parent.selectAll().data()
创建节点。
然后使用parent.select()
检索创建的节点以继续更改其子节点。我面临的问题是,当我再次选择它时,d3似乎正在更改节点的__data__
,它为其提供了父节点的数据,而不是我在selectAll
调用中分配给它的节点的数据
我在jsfiddle中重现了这个问题: http://jsfiddle.net/dgm4snau/2/
我做错了吗?如何重新选择创建的节点而不覆盖其__data__
?
答案 0 :(得分:2)
使用.select()
进行子选择a side effect:
如果当前元素具有关联数据,则此数据将由返回的子选择继承,并自动绑定到新选择的元素。
这就是你所看到的,并且是通过设计实现的。在您的情况下,解决方案是使用.selectAll()
而不是.select()
进行子选择:
level2Elem = level2Holder.selectAll('.level2');
修改过的小提琴here。