Bir svg kapsayıcısında d3 tarafından oluşturulan tüm şekillerin sırasını değiştirmem gerekiyor. Ama bunu yapamam. Yerel olarak yürütüldüğünde, aşağıdaki betik JSFiddle, "a ve b tanımlı değil" verir. Nasıl düzeltilmelidir?d3'te bir şekil seçimi nasıl sıralanır
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"))});
Veri kümesini sıralamaya çalışın ve öğeleri yeniden sıralamak için selection.sort() öğesini çağırın. –
ne demek istiyorsun? – tic
'a' ve' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''] seçimleri için bir başvuru değil (ve bu nedenle .attr() 'yöntemine sahip değillerdir), bu seçimlere/öğelere bağlı olan verilere başvururlar. Durumunuzda, 'a' ve 'b', null'dır, çünkü veriye bağlanmadınız. Verilere bağlanma, d3'ün 'data()' yöntemini çağırmayı ve 'enter '()' i (append()' ile çalmayı içerir. Tüm bunları söyleyerek, sıralama sadece DOM'daki sırasını değiştirir, ekranda değil (x ve y için olanlar). Bu senin niyetin mi? – meetamit