我需要更改svg容器中由d3創建的所有形狀的順序。但我無法做到。 JSFiddle中的以下腳本在本地執行時會給出「a和b未定義」。應該如何糾正?如何在d3中對形狀選擇進行排序
var svg = d3.select("body")
.append("svg")
.attr("width", 100)
.attr("height", 100);
svg.append("rect")
.attr({x:0,y:0,height:10,width:10,fill:'yellow'})
.attr("sort",3);
svg.append("rect")
.attr({x:0,y:20,height:10,width:10,fill:'red'})
.attr("sort",2);
svg.append("rect")
.attr({x:0,y:40,height:10,width:10,fill:'blue'})
.attr("sort",1);
d3.selectAll("rect").sort(function(a,b){return a.attr("sort")-b.attr("sort")});
d3.selectAll("rect")
.each(function(d,i){alert(d3.select(this).attr("sort"))});
更好地嘗試對數據集進行排序,然後調用selection.sort()對元素進行重新排序。 –
你是什麼意思? – tic
'sort'裏面的'a'和'b'不是對選擇的引用(因此它們沒有'.attr()'方法),它們是綁定到這些選擇/元素的數據的引用。在你的情況下,'a'和'b'都是'null',因爲你沒有綁定數據。綁定數據涉及調用d3的'data()'方法,並使用'enter()'來處理它們的'append()'。說了這麼多,排序只改變他們在DOM中的順序,而不是在屏幕上(這是x和y的用途)。這是你的意圖嗎? – meetamit