Sorting divs by number inside div tag and jQuery

前端 未结 4 1393
温柔的废话
温柔的废话 2021-01-14 13:40

I\'m trying to sort a list of divs with jQuery. Essentially the list might look like this:

相关标签:
4条回答
  • 2021-01-14 14:26
    var jVotes = $('div.contest_entry span.votes'), vals = [];
    jVotes.each(function() {
        var numVotes = $(this).html(); // may also be able to use .text()
        vals.push(numVotes);
        $(this).data('num-votes', numVotes);
    });
    vals.sort(function(a, b) {
        return (a < b) ? -1 : (a > b) ? 1 : 0;
    });
    var jParent = $('selector for parent container');
    for (var i = 0; i < jVotes.length; i++) {
        jParent.append(jParent.find('[data-num-votes=' + vals[i] + ']'));
    }
    
    0 讨论(0)
  • 2021-01-14 14:29

    Some thing along these lines should work:

    var list = [];
    
    function sortDivs(a,b)
    {
        return parseInt(a.text(), 10) - parseInt(b.text(), 10);
    }
    
    $('contest_entry').each(function () {
        list.push(this);
        $(this).detach();
    })
    
    list.sort(sortDivs)
    
    for (var x = 0; x < list.length; x++) {
        $('#parent_el').append(list[x]);//where parent_el is the place you want to reinsert the divs in the DOM
    }
    
    0 讨论(0)
  • 2021-01-14 14:33
    $(function(){ 
        var sortedList = $('.contest_entry').toArray().sort(function(lhs, rhs){ 
            return parseInt($(rhs).children("span.votes").text(),10) - parseInt($(lhs).children("span.votes").text(),10); 
        });
        //the variable 'sortedList' holds the divs ordered. All you need to do is place them in the DOM.
    }); 
    

    Here is a working example: http://jsfiddle.net/ZCvUa/

    0 讨论(0)
  • 2021-01-14 14:35

    I wrote a small plugin just for this purpose. Feel free to steal. Basically you select elements, sort them, and reappend in the new order.

    ==============================================================================

    Per Jason's request including code here

    $(".contest_entry").orderBy(function() {return +$(this).text();}).appendTo("#parent_div");
    

    #parent_div is a container for the .contest_entrys.

    The + is just a sneaky way to convert value to number to force number compare rather than string compare (unless that is what you want).

    orderBy() is a sorting plugin that I wrote. I expanded on it quiet a bit since then, but here is the simple version:

    jQuery.fn.orderBy = function(keySelector)
    {
        return this.sort(function(a,b)
        {
            a = keySelector.apply(a);
            b = keySelector.apply(b);
            if (a > b)
                return 1;
            if (a < b)
                return -1;
            return 0;
        });
    };
    
    0 讨论(0)
提交回复
热议问题