按排序数组排序

时间:2013-05-06 20:27:07

标签: javascript jquery html

我有一个页面,其中包含如下表格(自动按“名称”列排序)

  Name         Open Num   Total Num
-----------------------------------
Doe, John         0          0
Smith, Sarah      4          3
Tyler, Rose       7          8

第二个tr看起来像这样:

<tr id="1"><td class="N">Smith, Sarah</td><td class="O">4</td><td class="T">3</td></tr>

其中行ID是计数器(第一行= 0,第二行= 1,第三= 2等),单元格类是使用jQuery获取列($(".O")给出Open Num列)

我正在尝试让表格根据数字列(Open NumTotal Num)进行排序。因此输出看起来像这样(按Open NumTotal Num排序):

  Name         Open Num   Total Num
-----------------------------------
Tyler, Rose       7          8
Smith, Sarah      4          3
Doe, John         0          0

到目前为止,我将数字存储到数组arrQuick中,并将行号存储在不同的数组rowCount中。然后,我使用快速排序方法对数据进行排序,同时对第二个数组进行排序,这非常有效。所以现在我有排序的数据和我的行应该在的顺序。

问题

我无法弄清楚如何让表格行正确更新。

到目前为止,我有这个。

for(var i=0;i<rowCount.length;i++){
    var tmpHolder=$("#"+i).html();
    $("#"+i).html($("#"+rowCount[rowCount.length-(i+1)]).html());
    $("#"+rowCount[rowCount.length-(i+1)]).html(tmpHolder);
}

当单步执行时,我可以看到最初的更新工作正常。但是,最终它会在某​​些时候将行更新到不应该出现的地方,我不知道为什么。

1 个答案:

答案 0 :(得分:2)

您可以根据表格单元格的值对行进行排序。以下方法接受单元格的className,并根据该单元格的文本内容对行进行排序。

$.fn.sortTable = function(cls) {
    this.find('tr').sort(function(a, b){
       return $(a).find('td.'+cls).text() > $(b).find('td.' + cls).text();
    }).appendTo(this.find('tbody'));
}

$('table').sortTable('O');

支持升序和降序的更新方法。

$.fn.sortTable = function (opt) {
    var sort = typeof opt.sortType !== 'undefined' ? opt.sortType : 'asc',
        cls = opt.cls;
    if (!cls) return;

    var $tr = this.find('tbody').children().sort(function(a, b){
       return $(a).find('.' + cls).text() > $(b).find('.' + cls).text();
    });

    if (sort === 'des') {
       $tr = $tr.toArray().reverse();
    }
    this.find('tbody').append($tr);
}

$('table').sortTable({
    cls: 'N',    // className of the cells
    sortType: 'des'  // order 'asc' || 'des' 
});

http://jsfiddle.net/Af7mG/