我很困惑为什么reverse()适用于常规数组但不适用于d3.select对象,它们也基于数组。我基本上试图以相反的顺序遍历我从DOM中选择的元素,但是下面的代码似乎以相同的顺序遍历它们:
d3.selectAll('.someclass').each(function(){console.log(this);})
d3.selectAll('.someclass').reverse().each(function(){console.log(this);})
答案 0 :(得分:2)
我明白了。 d3.select
是一个数组,它位于文档中(https://github.com/mbostock/d3/wiki/Selections),但它是一个大小为1的容器数组,实际的DOM元素数组包含在第一个元素中。以下,虽然有点丑陋,按预期工作:
selection = d3.selectAll('.someclass')
selection[0].reverse()
selection.each(function(){console.log(this);})
我不是使用排序解决方案的忠实粉丝(这些元素在技术上已经排序,我还需要弄清楚DOM树中的当前顺序以进行比较)。
答案 1 :(得分:1)
D3中没有.reverse()
方法。请注意,选择不是数组,而是带有自己的方法实现来操作它们。要以特定方式对元素进行排序,请使用.sort()
。