如何在d3中对形状选择进行排序
how to sort a shape selection in d3
我需要更改d3在svg容器中创建的所有形状的顺序。但我做不到。JSFiddle中的以下脚本在本地执行时会给出"a和b未定义"。应该如何纠正?
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"))});
您需要这样排序:
var rects = d3.selectAll("rect")[0].sort(function(a, b) {
return d3.select(a).attr("sort") - d3.select(b).attr("sort")
}); //here rects will store the correct sorted order rectangle DOMs.
而不是这样做:
d3.selectAll("rect").sort(function(a,b){return a.attr("sort")-b.attr("sort")});
现在要根据排序更改矩形,请执行以下操作:
rects.forEach(function(rect, i){
d3.select(rect).attr("y", (i*20));//change the attribute of y
})
此处为工作代码
注意:我只是根据您提供的信息回答这个问题,但正确的方法是按照@meetamit在评论中建议的数据方式进行。
相关文章:
- Select2val不反映选择顺序,但对其进行排序
- 通过javascript和php动态排序表以及其他一些选择标准
- 如何在d3中对形状选择进行排序
- 如何根据用户选择顺序重新排序多选的值
- 动态生成<选择>未显示已排序列表中的第一个项目
- 使用多个页面的选择选项标签对 mysql 中的数据进行排序
- 是否有根据特异性对 CSS 选择器文本进行排序的 JS 库
- 将值添加到选择和排序
- 可排序的 Js 在带有选择/选项标签的 chrome 中不起作用,但与 ul/li 标签一起工作
- 使用JavaScript的“选择排序”
- 选择排序算法不起作用..警告..我是新手
- 如何改进选择排序
- jQuery在页面刷新时选择排序更改显示选项.什么'正在发生
- 为什么JavaScript选择排序挂起
- jqGrid表单编辑选择排序
- 选择排序不能正常工作
- 我正在尝试使用javascript中的选择排序算法对数组中的对象进行排序
- SlickGrid选择排序问题
- 为什么选择排序在Javascript中如此之快?
- 选择排序在javascript通过可汗学院