使用jQuery对DOM元素进行排序以排序数组
刚才我问了这个问题: javascript sort数组与订单数组一致,基于什么原因是一个错误的前提。 (我已经太久了,请给我rest一下)。
我真正需要做的是对DOM元素进行排序。 性能是我的应用程序的关键 ,因为它将在CPU非常糟糕的情况下运行。 所以我拥有的是这样的:
Jack Jill Nancy Tom Cartman
在JavaScript中:
$modules = $('#moduleWrap .module'); order = [3,1,4,0,2];
我需要的是这个:
Tom Jill Cartman Jack Nancy
我(错误地)认为我可以对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非常棒,因为它让事情变得简单,但如果你需要高性能,你应该宁愿不去。
试试这个。
从DOM树中分离元素可以加速该过程。
$modules.detach(); var len = order.length, temp = []; for( var i = 0; i < len; i++ ) { temp.push( $modules[ order[i] ] ); } $("#moduleWrap").append( temp );
小提琴这里http://jsfiddle.net/rEFu3/
我知道这已经很晚了,但也许会有所帮助。 我试图做类似的事情和#Felix Kling的回答让我90%。 但在我的情况下,我有一个等于订单值的div id,如下所示:
order = [3,1,4,0,2]; Jack Jill Nancy Tom Cartman
然后我可以使用位置值简单地推送元素
var elements = []; $.each(order, function(i, position) { elements.push($('#'+position)); }); $('#moduleWrap').append(elements);