对数据属性进行排序

时间:2014-12-04 19:31:35

标签: javascript jquery

我写了一个函数,它应该按价格高的方式对data-cost数据属性进行排序 - >低。当data-cost具有相同数量的数字时,它工作正常,但如果我添加具有不同数字量的data-cost,则该函数不再有效。我想保持与现在相同的结构,但由于我还不是JS的新手,我对更多可重用的解决方案持开放态度。提前感谢您的帮助。

小提琴:

http://jsfiddle.net/dn6mja0t/

HTML:

<a id="sort" href="#">Price High to Low</a>

<ul class="returned-list">
    <li data-cost="101">101</li>
    <li data-cost="103">103</li>
    <li data-cost="106">106</li>
    <li data-cost="42">42</li>
</ul>

JS:

var sortHL = function () {
    function compare(a,b) {
        if (a.cost > b.cost)
            return -1;
        if (a.cost < b.cost)
            return 1;
        return 0;
    }

    var items = [];
    $('.returned-list li').each(function() {
        var item = {
            cost: $(this).attr('data-cost'),
            contents: $(this)[0].outerHTML
        };
        items.push(item);
    });

    items.sort(compare);
    $('.returned-list').html('');
    for(var i=0;i<items.length;i++) {
        $('.returned-list').append(items[i].contents);
    }
};

$('#sort').on('click', function () { 
    sortHL();
});

3 个答案:

答案 0 :(得分:3)

您需要使用

cost: parseInt($(this).attr('data-cost'), 10)
在对象构造中

,以便将成本与数字进行比较而不是字符串。

答案 1 :(得分:2)

这是一个更短的方式:

var sortHL = function () {
    $(".returned-list li[data-cost]").detach().sort(function(a,b){
        return Number($(a).attr('data-cost')) < Number($(b).attr('data-cost'))
    }).appendTo($(".returned-list"))
};

$('#sort').on('click', function () { 
    sortHL();
});

答案 2 :(得分:1)

执行演员表:

cost: Number($(this).attr('data-cost')),