Мне нужно изменить порядок всех форм, созданных d3 в контейнере svg. Но я не могу этого сделать. Следующий сценарий в 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
'a' и' b' внутри 'sort' не являются ссылками на выбор (и, следовательно, они не имеют метода' .attr() '), это ссылки на данные, привязанные к этим выборам/элементам. В вашем случае оба 'a' и' b' являются 'null', потому что вы не привязывались к данным. Привязка к данным включает вызов метода 'data()' d3 и работу с 'enter()' to 'append()' them. Сказав все это, сортировка только изменяет их порядок в DOM, а не на экране (для этого нужны x и y). Это ваше намерение? – meetamit