2011-03-29 66 views
2

如果有的Javascript ID数组现在jQuery的:排序基于它们的ID的div,基于到ID列表

var myArray = ['2', '1', '3']; 

,我也有一组具有相应的ID的div。

<div id='container'> 
    <div id='item1'>1</div> 
    <div id='item2'>2</div> 
    <div id='item3'>3</div> 
</div> 

有没有一种简单的方法基于阵列的顺序这些div排序?我身边的刚刚通过的div循环和使用insertBefore()insertAfter()重新安排项目的想法反弹,但我不知道是否有更好的办法..

这是我想出到目前为止(JSFiddle DEMO

(function($){ 
    $.fn.jaySort= function(prefix, lst) { 
     var prev=null; 
     for (var x=0; x<lst.length; x++){ 
      if (!prev) prev = $('#placeHolder'); 
      $('#' + prefix + lst[x]).insertAfter(prev); 
      prev = $('#' + prefix + lst[x]); 
     } 
    }; 
})(jQuery); 


/////////////////////////////////////////// 

var myArray = ['2', '1', '3']; 
$('#container').jaySort('item', myArray); 

UPDATE

基于下面的接受的答案,代码已经细化到:

(function($){ 
    $.fn.jaySort= function(prefix, lst) { 
     for (var x=0; x<lst.length; x++) 
      $(this).append($('#' + prefix + lst[x])); 
    }; 
})(jQuery); 
$('#container').jaySort('item', ['3', '2', '1']); 
+0

你有什么问题? – mcgrailm 2011-03-29 14:15:43

+0

非常整洁的解决方案,你将不得不循环所有项目 – rsplak 2011-03-29 14:16:13

+0

我想没什么是**错了**它只是想知道是否有更好的方法,也许没有循环。 – Dutchie432 2011-03-29 14:25:19

回答

6

这也适用于(而且是短)

<div id='container'> 
    <div id='item1'>1</div> 
    <div id='item2'>2</div> 
    <div id='item3'>3</div> 
</div> 

var myArray = ['2', '1', '3']; 

$.each(myArray,function(index,value){ 
    $('#container').append($('#item'+value)); 
}); 

jsFiddle

+0

我喜欢'append()'变化。更新为我们两个代码的组合。 http://jsfiddle.net/Jaybles/CQXmW/ – Dutchie432 2011-03-29 14:44:19

0

我来到accros this article也许这就是你想要的?

+0

不是。不过谢谢。 – Dutchie432 2011-03-29 15:19:17