背景
我正在开发一个jQuery插件,将DOM元素以数组的形式进行存储,这样可以在不使用速度较慢的data()
的情况下,在这些元素旁边存储更多信息。
该数组如下所示:
[
{ element: DOMElement3, additionalData1: …, additionalData2: … },
{ element: DOMElement1, additionalData1: …, additionalData2: … },
{ element: DOMElement2, additionalData1: …, additionalData2: … },
]
这个插件的工作方式使得我无法按照可预测的顺序将这些元素推送到数组中,这意味着DOMElement3
实际上可能会出现在比DOMElement2
更低的索引位置。
然而,我需要这些数组元素按照它们包含的DOM元素在DOM中出现的顺序排序。一旦排序完成,前面例子中的数组将如下所示:
[
{ element: DOMElement1, additionalData1: …, additionalData2: … },
{ element: DOMElement2, additionalData1: …, additionalData2: … },
{ element: DOMElement3, additionalData1: …, additionalData2: … },
]
当然,这是在假设 DOMElement1
出现在 DOMElement2
之前,DOMElement2
出现在 DOMElement3
之前的情况下。
被放弃的解决方案
add()
方法返回一组DOM元素,它们按照在DOM中出现的顺序排列。我本可以使用它,但要求我使用一个 jQuery 集合——这意味着我必须重构上述插件的大部分内容以使用不同的存储格式。这就是为什么我认为这是最后的解决方案。
还有其他解决方案吗?
我原本想象使用 map()
和每个 DOM 元素绑定的全局 DOM 索引来完成,但似乎没有这样的“全局 DOM 索引”。
你能想到什么方法?(如果编写代码,欢迎使用原生JS和jQuery)
DOMElement3
添加到数组中,然后是DOMElement1
和DOMElement2
,则该数组将与第一个代码示例完全相同。 - user1728278