首页 > 解决方案 > chrome 浏览器中 sourceIndex 的 Javascript 替换

问题描述

我目前正在重写旧系统的某些部分以在最新的 chromium 浏览器上工作。但是,系统的某些部分依赖于旧的特定于浏览器的代码,例如旧 Internet Explorer 中的 .sourceIndex 属性,现在已弃用。

我有以下代码,它应该根据它们出现在文档中的索引对数组的所有元素进行排序。

arrReturnElements.sort(function (a, b) { // Perform a sort of all elements
    return (a.sourceIndex < b.sourceIndex ? -1 : (b.sourceIndex < a.sourceIndex ? 1 : 0));
});

我的文档中有很多不同的元素,所以我需要一个可以有效计算索引的通用方法。

你能帮助在javascript中执行这种排序的最佳方式吗?

任何帮助表示赞赏!

标签: javascriptsortingdom

解决方案


sourceIndex如果被弃用是有原因的。我会建议你一个解决方法,即使它很慢:

const allElements = Array.from(document.all);
const arrReturnElementsPatched = arrReturnElements.map(element => 
 ({ sourceIndex: allElements.indexOf(element), ...element})
);

然后使用arrReturnElementsPatched代替arrReturnElements.

但是我强烈建议您重构代码以在不使用document.alland的情况下达到结果sourceIndex。例如,您可以检查按数组中的索引排序是否具有相同的输出。或者,毕竟,实际上需要这种排序。


推荐阅读