当我这样做时:
var link = svg.selectAll('.link')
.data(links)
.enter().append('path')
.attr('class', 'link')
.attr('d', diagonal)
该类没有节点.link
。所以 selectAll 返回一个空的选择。但我发现,当你第一次调用它时,你可以selectAll('whaterverYouWant')
这是因为 D3 与您选择的内容无关,因为您稍后会提供标签名称和类.append('path')
,.attr(class ...)
.
而且,如果您想选择已经存在的元素,我会在.enter
返回占位符选择的文档中阅读。但是,如果它返回一个占位符的选择(带有 .link 类的匿名标签?),则没有必要将路径附加到路径。
当我调用.append 时,它会执行我想要的操作,即将路径附加到svg。但我不明白这背后的逻辑。(我很高兴它可以工作,因为 d3 很强大)
所以,好吧,我 selectAll('anything') 并附加我想要的,不管我选择了什么。但如果我试试这个:
d3.select('#savestring-debug')
.selectAll('div')
.data(debugobjs)
.enter().append('span')
.attr('style', function(d) { return 'background:#'+d.color })
.text(function(d) { return d.aff });
这将为 div 创建占位符,但我附加跨度。实际上创建了跨度,但我仍在寻找我的 div ;)
那么, selectAll >> data >> enter >> append 背后的原理是什么?
谢谢