我有一个页面,其中包含如下表格(自动按“名称”列排序)
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 Num
和Total Num
)进行排序。因此输出看起来像这样(按Open Num
或Total 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);
}
当单步执行时,我可以看到最初的更新工作正常。但是,最终它会在某些时候将行更新到不应该出现的地方,我不知道为什么。
答案 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'
});