1

サンバーストでは、すべてのアークが生成された直後に、コードにルートアークを選択させるにはどうすればよいですか?

たとえば、コードでは次のようになります。

var first_arc = ""
.json("../data/flare.json", function(json) {
   var path = vis.data([json]).selectAll("path")
       .data(partition.nodes)
     .enter().append("path")
       .attr("display", function(d) { return d.depth ? null : "none"; })
       .attr("d", arc)
       .attr("t_name", function(d) {return d.name})
       .style("fill-rule", "evenodd")
       .on("click", function(d)...

中央の円弧をクリックすると、「d」として「関数」に渡されます。

(そのデータはjsonファイルの最初になります)

アップデート1:そのようにコードを変更する…</ p>

.style("fill-rule", function(d) {
   if (first_arc == "") first_arc = d; return "evenodd"})

…問題を解決しました、それは戻りますobject

name: "flare"
children: Array[10]
...

しかし、この解決策は正しく見えず、一般的ではありません。

アップデート2:いくつかの選択を試しました。例:

first_arc = d3.select("[name='flare']")

通常は次を返しますarray

0: null
length: 1
parentNode: HTMLHtmlElement
__proto__: Array[0]

または「未定義」

アップデート3

first_arc = d3.select("[t_name='flare']")

array子供がいるサイズ1の返品:

0: SVGPathElement
   __data__: Object

__data__私が探しているオブジェクトはどこにありますが、それを選択することができません。

4

1 に答える 1

2

ルートノードは、「depth」属性が0に設定されているノードです。したがって、次のように言うことができます。

d3.selectAll("path").filter(function(d) { return d.depth === 0; })

D3はCSS3を使用して要素を選択するため、上記の試みは機能しませんでした。したがって、 CSS3セレクターでのみd3.selectとd3.selectAllを使用できます。つまり、この方法で各要素にバインドされたデータにアクセスすることはできません。バインドされたデータをフィルタリングする方法は、selection.filterを使用することです。

D3選択は文字通り要素の配列です。「選択の操作」セクションを参照してください。

最後に、 selection.datum()__data__を使用して要素のバインドされたプロパティを取得できます。

于 2012-07-31T16:03:27.583 に答える