使用jQuery动态安排div

我有以下结构:

现在someid实际上是该div的唯一ID。 现在我收到一个有不同顺序的数组,比如说3,2,1,4,然后我如何使用jQuery移动这些div来匹配新的顺序?

非常感谢您的宝贵时间。

我的插件版本 – Working Demo

获取数组和可选的id前缀并重新排序其id与数组内的(id前缀)+值的顺序相对应的元素。 数组中没有具有相应id的元素的任何值都将被忽略,并且将删除在该数组中没有id的所有子元素。

 (function($) { $.fn.reOrder = function(array, prefix) { return this.each(function() { prefix = prefix || ""; if (array) { for(var i=0; i < array.length; i++) array[i] = $('#' + prefix + array[i]); $(this).empty(); for(var i=0; i < array.length; i++) $(this).append(array[i]); } }); } })(jQuery); 

演示代码

jQuery的

  $(function() { $('#go').click(function() { var order = $('#order').val() == ""? null: $('#order').val().split(","); $('#container').reOrder(order, 'someid'); }); }); (function($) { $.fn.reOrder = function(array, prefix) { return this.each(function() { prefix = prefix || ""; if (array) { for(var i=0; i < array.length; i++) array[i] = $('#' + prefix + array[i]); $(this).empty(); for(var i=0; i < array.length; i++) $(this).append(array[i]); } }); } })(jQuery); 

HTML

     reOrder Demo     
div1
div2
div3
div4

Pass in a comma separated list of numbers 1-4 to reorder divs

这是一个没有jQuery的解决方案:

 function appendNodesById(parent, ids) { for(var i = 0, len = ids.length; i < len; ++i) parent.appendChild(document.getElementById(ids[i])); } appendNodesById(document.getElementById('container'), ['someid4', 'someid2', 'someid3', 'someid1']); 

[编辑],这是经过测试和运作的:

 var order = [3,2,1,4]; var container = $("#container"); var children = container.children(); container.empty(); for (var i = 0; i < order.length; i++){ container.append(children[order[i]-1]) } 

i-1是必需的,因为您的排序从1开始,但数组从0开始索引。

感谢JP和Russ Cam让我再次看到它。

如果您拥有数组中的所有内容,则从代码中的包装器div 容器中删除所有内容。 然后开始逐个添加收到的div:

  var v = $(ar[0]).append(ar[1]).append(ar[2]); $("#container").html(v); 

如果这不起作用,那么请查看这个讨论定位元素相对于其他元素的线程 。