私がこれを行うとき:
var link = svg.selectAll('.link')
.data(links)
.enter().append('path')
.attr('class', 'link')
.attr('d', diagonal)
.link
クラスを持つノードはありません。そのため、selectAll は空の選択を返します。しかし、これを初めて呼び出すと、次のことができることがわかりました。selectAll('whaterverYouWant')
.append('path')
これは、後でタグ名とクラスを提供するため、D3 は選択内容に関係がないためです.attr(class ...)
。
そして、既に存在する要素を選択したい場合.enter
は、プレースホルダーの選択を返すドキュメントを読みました。しかし、プレースホルダーの選択 (.link クラスの匿名タグ?) を返す場合、パスにパスを追加する意味はありません。
.append を呼び出すと、必要な処理が実行されます。つまり、svg へのパスが追加されます。しかし、私はその背後にある論理を理解していません。(d3は強力なので、うまくいくとうれしいです)
だから、OK私は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 の背後にある原則は何ですか?
ありがとう