使用数据属性按字母顺序对div进行排序

时间:2015-01-08 08:54:20

标签: javascript jquery sorting

我想使用数据属性值按字母顺序对html div进行排序。  我有以下代码,想知道,如何实现

<div id="aphaOrder">
    <div class="value"  data-site="olark">olark</div>   
    <div class="value"  data-site="snapengage">snapengage</div> 
    <div class="value"  data-site="helponclick">helponclick</div>
    <div class="value"  data-site="hangouts">hangouts</div>
    <div class="value"  data-site="atlass">atlass</div> 
    <div class="value"  data-site="hipchat">hipchat</div>   
    <div class="value"  data-site="chat hip">chat hip</div>
    <div class="value"  data-site="force">force</div>
    <div class="value"  data-site="sugar sms">sugar sms</div>
    <div class="value"  data-site="capsule">capsule</div>
    <div class="value"  data-site="highrise">highrise</div>
    <div class="value"  data-site="nimble">nimble</div>
    <div class="value"  data-site="batch">batch</div>
    <div class="value"  data-site="book crm">book crm</div>
    <div class="value"  data-site="solve">solve</div>
    <div class="value"  data-site="insightly">insightly</div>
    <div class="value"  data-site="pipeliner">pipeliner</div>
    <div class="value"  data-site="shopify">shopify</div>
    <div class="value"  data-site="wordpress">wordpress</div>
    <div class="value"  data-site="Magento">Magento</div>
</div>
var alphabeticallyOrderedDivs = $('.value').sort(function(a,b){
    return $(a).attr('data-site') > $(b).attr('data-site');
});
$("#aphaOrder").html(alphabeticallyOrderedDivs);

这是代码没有给出正确的结果。请帮帮我。

4 个答案:

答案 0 :(得分:11)

您可以使用String.prototype.localeCompare

<强> JSFIDDLE here


var alphabeticallyOrderedDivs = $('.value').sort(function(a, b) {
    return String.prototype.localeCompare.call($(a).data('site').toLowerCase(), $(b).data('site').toLowerCase());
});

var container = $("#aphaOrder");
container.detach().empty().append(alphabeticallyOrderedDivs);
$('body').append(container);

答案 1 :(得分:2)

这应该有效: -

        $("#aphaOrder .value").sort(function (a, b) {
            if ( ($(a).attr("data-site").toLowerCase() > $(b).attr("data-site").toLowerCase()) )  { 
                return 1;
            } else if ( ($(a).attr("data-site").toLowerCase() == $(b).attr("data-site").toLowerCase()) ){
                return 0;
            } else {
                return -1;
            }
        }).each(function () {
            var elem = $(this);
            elem.remove();
            $(elem).appendTo("#aphaOrder");
        });

http://jsfiddle.net/0bs5mu6e/2/

答案 2 :(得分:1)

您尝试获取属性data-value。没有这样的财产。检查 JSFIDDLE

试试这个:

return $(a).data('site').toLowerCase() > $(b).data('site').toLowerCase();

return $(a).attr('data-site').toLowerCase() > $(b).attr('data-site').toLowerCase();

输出将是:

atlass
batch
book crm
capsule
chat hip
force
hangouts
...

答案 3 :(得分:0)

这是一个修改后的版本,其中包含一个降序排序选项。

collect_list

}