Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting d3v2-Dom排序在Safari中不起作用_Sorting_Safari_D3.js - Fatal编程技术网

Sorting d3v2-Dom排序在Safari中不起作用

Sorting d3v2-Dom排序在Safari中不起作用,sorting,safari,d3.js,Sorting,Safari,D3.js,我在Safari中使用dom排序时遇到了一些问题,它基本上不会移动dom项。 订购在Chrome和Firefox中都有效,我唯一的问题是Safari。 这是我正在使用的代码: var hovered = d3.select(this)[0][0]['__data__']['properties']['name']; g.selectAll("path").sort(function(a, b) { return (a.properties.name == hovered ? 1 : 0);;

我在Safari中使用dom排序时遇到了一些问题,它基本上不会移动dom项。 订购在Chrome和Firefox中都有效,我唯一的问题是Safari。 这是我正在使用的代码:

var hovered = d3.select(this)[0][0]['__data__']['properties']['name'];
g.selectAll("path").sort(function(a, b) {
  return (a.properties.name == hovered ? 1 : 0);;
});
我之所以使用它,是因为在后面的代码中,我对悬停的路径进行了一些缩放,如果它不是dom树中的最后一个,那么它会出现在它后面的路径后面


这方面的任何帮助都将是巨大的。

问题是您尚未为实现有效的比较器。如果A在b之前,比较器需要返回一个小于零的数字;如果A在b之后,比较器需要返回一个大于零的数字;如果不关心A和b的相对顺序,比较器需要返回零

如果要将悬停的名称移到前面,则需要以下内容:

function order(a, b) {
  return (a.properties.name == hovered) - (b.properties.name == hovered);
}
顺序在Safari和Firefox中起作用的原因是它们使用,当比较器返回0时保留顺序。但是,ECMAScript标准不能保证这种行为,因此您应该实现适当的比较器,而不是依赖于这种特定于浏览器的行为。(如果确实需要稳定排序,可以将其构建到比较器中,但随后需要缓存以前的顺序。)

综上所述,在悬停时将特定节点移动到前面比排序所有元素更快:

path.on("mouseover", function() {
  this.parentNode.appendChild(this);
});
如果您经常这样做,您甚至可以定义一个方法