2016-08-01 77 views
3

我試圖讓一個約束放鬆爲我的餅圖工作。 它基於此示例https://jsfiddle.net/thudfactor/HdwTH/,但使用的放鬆方法似乎不再適用於v4。
具體問題是他們如何直接訪問選擇組數組:D3 v4 - 訪問選擇數組並找到相應的元素

textLabels = labelGroups.append("text").attr(...); 

if(again) { 
     labelElements = textLabels[0];  <------------- here 
     textLines.attr("y2",function(d,i) { 
      labelForLine = d3.select(labelElements[i]); 
      return labelForLine.attr("y"); 
     }); 
     setTimeout(relax,20) 
    } 

它是否與D3 4.x版改變了你訪問一個選項組陣列?
你現在怎麼樣?

回答

7

在D3 4.0中,選擇不再是數組。根據API:

選擇不再子類使用原型鏈注入的數組;他們現在是普通的對象,提高了性能。

所以,如果你console.log(textLabels),你會看到這樣的內容:

{_groups: Array[1], _parents: Array[1]} 

這依賴於你有什麼選擇。從那裏,你可以使用textLabels._groups來訪問你的數組。

對於具有陣列,則必須使用selection.nodes(),其中,根據API:

返回所有(非空)的陣列在此選擇的元素。

+2

非常感謝Gerardo,它給了我正確的線索來使它工作! 'selection.nodes()'做了訣竅,現在v4返回包含在選擇中的節點數組。 – TommyF

+0

@TommyF我希望我可以把這個提升一百倍。我在最後的四十分鐘裏四處尋找。 –

+0

@ba_ul那麼,你至少可以*一次* * *! :-) –