具有数组值的jquery排序元素

我需要根据它的属性排序一些元素。 举个例子:

和array_num

 {3, 2, 1, 4} 

伪代码:

 $('#sort').sort(array_num, 'n'); 

结果将是:

 

 ​var order = [3, 2, 4, 1]​; var el = $('#sort'); var map = {}; $('#sort div').each(function() { var el = $(this); map[el.attr('n')] = el; }); for (var i = 0, l = order.length; i < l; i ++) { if (map[order[i]]) { el.append(map[order[i]]); } } 

完整代码在这里

未经测试…

 $.fn.asort = function (order, attrName) { for(var i = 0, len = order.length; i < len; ++i) { this.children('[' + attrName + '=' + order[i] + ']').appendTo(this); } } 

我偶然发现了这个想要解决我追求的问题。 我采用了@ shrikant-sharat的方法,并添加了一点,因为我需要排序的属性实际上是在子元素上。 以为我会在这里添加,以防它帮助任何人(以及未来的我!)

 $.fn.asort = function (order, attrName, filter) { console.log(this.length, order.length, order); for(var i = 0, len = order.length; i < len; ++i) { if(typeof(filter) === 'function') { filter(this.children(), attrName, order[i]).appendTo(this); } else { this.children('[' + attrName + '=' + order[i] + ']').appendTo(this); } } return this.children(); } 

它允许您传递filterfunction以匹配您所追求的元素。 它不是我认为最有效的,但它适用于我,例如:

 $('.my-list').asort(mapViewOrder, 'data-nid', function(items, attrName, val) { return items.filter(function(index, i) { return ($(i).find('[' + attrName + '="' + val + '"]').length); }); });