基于属性'data-sort'在jQuery中对div进行排序?

时间:2011-05-26 04:35:14

标签: jquery jquery-selectors javascript jquery-ui-sortable

如果我有几个div:

<div data-sort='1'>div1</div>
<div data-sort='4'>div4</div>
<div data-sort='8'>div8</div>
<div data-sort='12'>div12</div>
<div data-sort='19'>div19</div>

我动态创建div:

<div data-sort='14'>div1</div>
<div data-sort='6'>div1</div>
<div data-sort='9'>div1</div>

如何才能让他们按顺序排序已经加载的div,而不必重新加载所有div?

我认为我需要在屏幕上构建所有div的数据排序值数组,然后查看新div适合的位置,但我不确定这是否是最好的方法。

4 个答案:

答案 0 :(得分:93)

使用此功能

   $('div').sort(function (a, b) {

      var contentA =parseInt( $(a).attr('data-sort'));
      var contentB =parseInt( $(b).attr('data-sort'));
      return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0;
   });

你可以在添加新的div之后立即调用此函数

答案 1 :(得分:20)

我把它变成了一个jQuery函数:

jQuery.fn.sortDivs = function sortDivs() {
    $("> div", this[0]).sort(dec_sort).appendTo(this[0]);
    function dec_sort(a, b){ return ($(b).data("sort")) < ($(a).data("sort")) ? 1 : -1; }
}

所以你有一个像“#boo”这样的大div和你里面的所有小div:

  

$( “#BOO”)sortDivs();

由于Chrome中存在错误,您需要“?1:-1”,如果没有此错误,则不会超过10个div! http://blog.rodneyrehm.de/archives/14-Sorting-Were-Doing-It-Wrong.html

答案 2 :(得分:7)

在这里回答了同样的问题:

重新发布:

在搜索了许多解决方案后,我决定blog about how to sort in jquery。总之,按数据属性对jquery“类数组”对象进行排序的步骤......

  1. 通过jquery selector
  2. 选择所有对象
  3. 转换为实际数组(不是类似数组的jquery对象)
  4. 对象数组进行排序
  5. 使用dom对象数组转换回jquery对象
  6. <强> HTML

    <div class="item" data-order="2">2</div>
    <div class="item" data-order="1">1</div>
    <div class="item" data-order="4">4</div>
    <div class="item" data-order="3">3</div>

    普通jquery选择器

    $('.item');
    
    [<div class="item" data-order="2">2</div>,
     <div class="item" data-order="1">1</div>,
     <div class="item" data-order="4">4</div>,
     <div class="item" data-order="3">3</div>
    ]

    可以按数据顺序对此进行排序

    function getSorted(selector, attrName) {
        return $($(selector).toArray().sort(function(a, b){
            var aVal = parseInt(a.getAttribute(attrName)),
                bVal = parseInt(b.getAttribute(attrName));
            return aVal - bVal;
        }));
    }
    > getSorted('.item', 'data-order')
    
    [<div class="item" data-order="1">1</div>,
     <div class="item" data-order="2">2</div>,
     <div class="item" data-order="3">3</div>,
     <div class="item" data-order="4">4</div>
    ]

    See how getSorted() works.

    希望这有帮助!

答案 3 :(得分:-1)

我用这个来排序图像库,其中排序数组将被ajax调用改变。希望它对某人有用。

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

$('.imgs').each(function() {
    elArray[$(this).data('image-id')] = $(this);
});

$.each(myArray,function(index,value){
   $('#container').append(elArray[value]); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div id='container'>
   <div class="imgs" data-image-id='1'>1</div>
   <div class="imgs" data-image-id='2'>2</div>
   <div class="imgs" data-image-id='3'>3</div>
</div>

小提琴:http://jsfiddle.net/ruys9ksg/