javascript - 使用 jQuery 对 DOM 元素进行排序以对数组进行排序

标签 javascript jquery arrays sorting

刚才我问了这个问题: javascript sort array to align with order array基于事实证明是错误的前提。 (我已经起来太久了,请让我休息一下)。

我真正需要做的是对 DOM 元素进行排序。 性能是我应用程序的关键,因为它会在 CPU 资源非常匮乏的情况下运行。所以我所拥有的是这样的:

<div id="moduleWrap">
    <div class="module">Jack</div>    <!-- 0 -->
    <div class="module">Jill</div>    <!-- 1 -->
    <div class="module">Nancy</div>   <!-- 2 -->
    <div class="module">Tom</div>     <!-- 3 -->
    <div class="module">Cartman</div> <!-- 4 -->
</div>

在 JavaScript 中:

$modules = $('#moduleWrap .module');
order    = [3,1,4,0,2];

我需要的是:

<div id="moduleWrap">
    <div class="module">Tom</div>     <!-- 3 -->
    <div class="module">Jill</div>    <!-- 1 -->
    <div class="module">Cartman</div> <!-- 4 -->
    <div class="module">Jack</div>    <!-- 0 -->
    <div class="module">Nancy</div>   <!-- 2 -->
</div>

我认为(错误地)我可以对 jQuery 对象进行排序并简单地附加结果。事实并非如此。

最佳答案

我只是遍历 order 数组并相应地重新排列 DOM 元素:

var elements = [];
$.each(order, function(i, position) {
    elements.push($modules.get(position));
});

$('#moduleWrap').append(elements);

DEMO

为了提高性能,你可以带走越来越多的 jQuery。例如:

var wrapper = document.getElementById('moduleWrap');
for(var i = 0, l = order.length; i < l; i++) {
    wrapper.appendChild($modules.get(order[i]));
}

DEMO

jQuery 很棒,因为它使事情变得简单,但如果您需要高性能,您最好不要使用它。

关于javascript - 使用 jQuery 对 DOM 元素进行排序以对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13149426/

相关文章:

javascript - 使用 javascript 动态创建文本区域

java - 在 Android 上从 USB 文本中分割 str 和连续制表符后留下的空字段难以识别

javascript - 突出显示表格行中的最近日期

将无符号字符数组转换为十六进制

javascript - 通过 highcharts 上的 setData 操作数组进行添加

javascript - JavaScript 中是否有将文本替换为其他文本的函数?

javascript - 我正在尝试创建一个从英寸到英尺的转换器,但只显示小数

javascript - .png 或 .jpg 图像在屏幕上移动,spritesheet,css 关键帧,停止并重复循环

php - 如何使用 Codeigniter 保存多个数组

javascript - 如何在 jQuery 中编辑一个表的所有 TR 的值