2013-05-06 48 views
3

我有一个包含如下内容(由“名称”列自动排序)表整理排序后的数组

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); 
} 

当逐步通过我可以看到,最初的更新工作。然而,最终它得到了一些点行更新到他们不应该的地方,我不知道为什么。

+0

标识不应该是唯一的数字。 – Shikiryu 2013-05-06 20:33:29

+1

ID可以是HTML5中的数字 – PSL 2013-05-06 20:35:45

+0

为什么不?行ID唯一使用的是此jQuery更新,因此使它们成为数字和顺序意味着我可以轻松地进行for循环设置。 – 2013-05-06 20:36:36

回答

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/

+0

非常优雅。有没有办法扭转这种(排序降序?),并仍然保持顶部的标题行? – 2013-05-06 20:43:22

+0

@DavidStarkey我已经更新了答案。 – undefined 2013-05-06 20:55:32

+0

不幸的是,当对DESC排序时,它将标题行移动到表格的底部。为了解决这个问题,我只是把一个表格放在这个生成的表格的上面,这个表格包含了标题,并且改变了你的艺术品以使用表格ID。它在GC和IE中似乎也有一些问题,但我喜欢FF,所以我对此很满意。 – 2013-05-06 21:19:09