Javascript表排序

时间:2015-03-31 10:16:49

标签: javascript sorting

我正在尝试实现表格排序功能。

它需要在<td><tr>上保留类和一些数据属性,因此我的做法与我的做法略有不同在其他例子中看到。

我在排序功能中使用localeCompare()。我遇到的问题是,在排序后,列表中的第一个第七个项目无序 - 其余部分似乎是有序的。我尝试使用> <改变排序功能,但我的结果相同。

任何人都可以浏览一下我的代码,看看是否有一个明显的错误,我错过了吗?

我已经在每一栏都进行了测试,它始终是第一和第二。第七。

enter image description here

var sort = function() {

        var tbody    = document.getElementById(tbody_id),
            rows_len = tbody.rows.length,
            col_len  = tbody.rows[0].cells.length;

        //console.log(rows_len, col_len);

        var order_hash = [];    

        //loop rows
        for(var i = 0; i < rows_len; i++) {

            order_hash[i] = {
                value:tbody.rows[i].cells[column].innerHTML,
                html: tbody.rows[i].outerHTML
            };

        }

        console.log(order_hash);

        order_hash.sort(function(a, b) {

            var result = a.value.localeCompare(b.value);

            return (order == 'asc') ? result : (result == 0) ? 0 : (result < 1) ? 1 : -1;

        });

        order_hash.sort();

        var html = '';

        for(var i = 0; i < rows_len; i++) {
            html += order_hash[i].html;
        }

        tbody.innerHTML = html;

        order = undefined;
        delete(order_hash);

    };



}();

1 个答案:

答案 0 :(得分:1)

您正在调用sort方法两次(一个自定义和一个标准),因此第二个排序将以不一致的方式对order_hash进行排序,因为:

  

如果未提供compareFunction,则通过转换对元素进行排序   它们以字符串形式并以Unicode代码点顺序比较字符串。对于   例如,“Cherry”出现在“banana”之前。在数字排序中,9来了   在80之前,但由于数字被转换为字符串,“80”来了   在Unicode顺序中的“9”之前。

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

删除第二种,并且可以正常工作。

演示:http://jsfiddle.net/wf9o2tg8/