Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.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
Javascript 使用jQuery对DOM元素进行排序以排序数组_Javascript_Jquery_Arrays_Sorting - Fatal编程技术网

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

Javascript 使用jQuery对DOM元素进行排序以排序数组,javascript,jquery,arrays,sorting,Javascript,Jquery,Arrays,Sorting,刚才我问了一个问题: 基于一个错误的前提。(我起床太久了,请让我休息一下) 我真正需要做的是对DOM元素进行排序性能是我的应用程序的关键,因为它将在CPU非常差的情况下运行。所以我得到的是这样的东西: <div id="moduleWrap"> <div class="module">Jack</div> <!-- 0 --> <div class="module">Jill</div> <

刚才我问了一个问题: 基于一个错误的前提。(我起床太久了,请让我休息一下)

我真正需要做的是对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>
order    = [3,1,4,0,2];

<div id="0" class="module">Jack</div>    <!-- 0 -->
<div id="1" class="module">Jill</div>    <!-- 1 -->
<div id="2" class="module">Nancy</div>   <!-- 2 -->
<div id="3" class="module">Tom</div>     <!-- 3 -->
<div id="4" class="module">Cartman</div> <!-- 4 -->
我需要的是:

<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对象进行排序并简单地附加结果。事实并非如此。

我只需迭代
顺序
数组,并相应地重新排列DOM元素:

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

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

为了提高性能,您可以使用越来越多的jQuery。例如:

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

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

试试这个

从DOM树中分离元素可能会加快进程

$modules.detach();

var len = order.length,
    temp = [];

for( var i = 0; i < len; i++ ) {
  temp.push( $modules[ order[i] ] );
}

$("#moduleWrap").append( temp );
$modules.detach();
var len=订单长度,
温度=[];
对于(变量i=0;i
在这里拉小提琴

我知道现在已经晚了,但也许这会对某人有所帮助。我试图做一件类似的事情,费利克斯·克林的回答让我达到了90%。但在我的例子中,我有一个div id,它等于order值,如下所示:

<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>
order    = [3,1,4,0,2];

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

我不相信您可以附加Dom元素数组。此外,它不能在Dom中添加。它必须被取代。纯js回答可以接受。@freshyeball:是的,你可以传递一个元素数组(见文档),为什么不能附加(添加)元素?如果元素已经存在于DOM中,它将被移动到新位置,而不是克隆。这是重新排列DOM元素的一种非常简单的方法。可以告诉您可以附加元素,但不能附加数组。顺便说一句,回答得很好。如果你真的那么关心性能,那么为什么首先要使用jquery?应用程序的另一部分是使用highcharts,这需要它(实际上我使用的是Zepto)。我没有将不同的js文件提供给不同的视图,而是通过将js绑定到单个文件来利用浏览器缓存。这里不一定需要Jquery。