JQuery按名称排序元素

时间:2014-08-09 11:27:06

标签: jquery sorting

我要按照他们的名字对页面上的元素进行排序。这是我的代码:http://jsfiddle.net/q3a9gmm6/1/

  • 我使用charCodeAt()能够对像波斯语这样的UTF-8值进行排序。

有时我会得到错误的答案。 正如你所看到的那样,“Windows Phone”必须在“Windows Mobile”和“AMD”之后。

我认为代码应该进行优化以降低复杂性。

有什么问题?

JQuery的:

var itms_ind = 8;   

for (i = 0; i <= itms_ind; i++) {
    var first = $('.container div label:eq(0)');
    var first_char1_int = first.text().substr(0, 1).toLowerCase().charCodeAt();
    var first_char2_int = 
        first.text().substr(first.text().indexOf(' ') + 1, 1).toLowerCase().charCodeAt();

    for (j = 0; j <= itms_ind; j++)
        {
            $('.container div label').each(function() {
                var current = $(this);
                var current_char1_int = current.text().substr(0, 1).toLowerCase().charCodeAt();
                var current_char2_int = current.text().
                    substr(current.text().indexOf(' ') + 1, 1).toLowerCase().charCodeAt();

                if ((current_char1_int < first_char1_int)){
                    first.parent().before(current.parent());    
                } else
                if ((first_char1_int == current_char1_int)){
                    if (first_char2_int < current_char2_int)
                        current.parent().after(first.parent());
                }
            });
        }
}

2 个答案:

答案 0 :(得分:3)

尝试基本排序,如

var els = $('.container div').get();

els.sort(function(el1, el2){
    return $(el1).text().trim().localeCompare($(el2).text().trim())
})

$('.container').append(els)

演示:Fiddle

答案 1 :(得分:0)

检查this fiddle

我完全改变了你的排序解决方案。

var items = [];
$('.container div label').each(function(){
    $this = $(this);
    items.push($this.text());

});
items.sort();