我有以下示例。
<div class="parent">
<div data-id="5"></div>
<div data-id="2"></div>
<div data-id="3"></div>
<div data-id="1"></div>
<div data-id="4"></div>
</div>
如果我想按升序(1,2,3,4,5)对这些 div 进行排序,通常会使用循环并将 div 按顺序附加到父 div 中。但是这意味着我总是要对 DOM 进行 5 次更改(不管 div 的顺序如何),每个 div 都需要一次。
但是,您可以使用 .insertBefore() 方法仅进行两次更改即可正确排序 div!
5,2,3,1,4
Insert 1 before 2
5,1,2,3,4
Insert 5 behind 4 (using .insertBefore() and .nextSibling)
1,2,3,4,5
问题1 通过仅对DOM进行2次更改,我认为会发生更少的回流,使“2次更改”排序操作比“5次更改”排序操作更快。这个正确吗?
问题2 什么样的方法/算法能够找出只插入1 before 2
和5 behind 4
的方法?
问题3(奖励) 这个“优化”的算法是否仍然比增加项的数量更快?范围10-100-1,000-10,000-100,000
可能需要澄清:我不是在寻找一种以最优方式确定顺序(1,2,3,4,5)。在某个时刻,我知道顺序,但我想将顺序与div的顺序进行比较,然后再找出最少的操作。