2012-07-27 123 views
1

sunburst中,我怎樣才能讓代碼選擇一個根弧,就在所有弧生成之後?選擇弧/元素

例如,代碼:

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:更改像這樣的代碼...

.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']") 

收益大小爲1 array兒童:

0: SVGPathElement 
    __data__: Object 

,其中__data__是經過我的對象,但我不能管理,將其選中。

+0

要清楚:你是否想讓代碼選擇元素,還是要求用戶單擊一個弧並直接處理? – Phrogz 2012-07-27 15:23:14

+0

嘗試讓代碼選擇元素,直到電弧生成完成。 – alm 2012-07-27 15:33:08

+0

那我還是不明白你的問題是什麼。你可以使用['d3.select()'](https://github.com/mbostock/d3/wiki/Selections#wiki-d3_select)方法。你嘗試過嗎?如果是這樣,你的代碼是什麼,你得到了什麼錯誤(和你期望的是什麼)? – Phrogz 2012-07-27 16:05:01

回答

2

根節點是一個具有「深度」屬性設置爲0,所以你可以說:

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

你嘗試以上沒有工作,因爲D3 uses CSS3 to select elements。因此,只能使用d3.select和d3.selectAll與CSS3選擇器,即不能以這種方式訪問​​綁定到每個元素的數據。過濾綁定數據的方法是使用selection.filter

D3 selections確實是一個元素數組,請參閱「在選擇操作」部分。

最後,您可以使用selection.datum()獲取元素的綁定__data__屬性。

+0

謝謝!這非常有用。雖然,您提到的選擇返回與d3.select(「[t_name ='flare']」)「相同的對象。 – alm 2012-08-01 08:46:08

+1

我不知道t_name是什麼 - 是你設置的屬性?我已經添加了一些關於D3選擇和檢索綁定數據的答案。 – 2012-08-01 12:41:14

+0

是的,.datum()是我需要的。非常感謝! – alm 2012-08-01 13:39:02