使用jQuery tablesorter排除列的排序

我正在寻找一种方法来排除使用jQuery的tablesorter插件排序单个列。 具体来说,我有一个相当大的表,并希望保持一个“行号”列固定,以便在排序后很容易看到表中特定行的位置。

例如:

# name ----------- 1 papaya 2 apple 3 strawberry 4 banana 

在name列上排序时,应该导致:

 # name ----------- 1 apple 2 banana 3 papaya 4 strawberry 

谢谢。

这是一个可以使用的小部件,可以实现您的目标:

 $(function() { // add new widget called indexFirstColumn $.tablesorter.addWidget({ // give the widget a id id: "indexFirstColumn", // format is called when the on init and when a sorting has finished format: function(table) { // loop all tr elements and set the value for the first column for(var i=0; i < table.tBodies[0].rows.length; i++) { $("tbody tr:eq(" + i + ") td:first",table).html(i+1); } } }); $("table").tablesorter({ widgets: ['zebra','indexFirstColumn'] }); }); 

对于那些在寻找排除列可排序的方法(即列上的可点击标题)时发现这种情况的人,下面的示例将第4列(零索引)排除在排序之外):

 $("table").tablesorter({ headers: {4: {sorter: false}} }); 

编辑:我在http://jsbin.com/igupu4/3上做了一个这种技术的样本。 单击任何列标题进行排序…

虽然我没有回答你关于jquery的问题,但是这里有另一种获取你在这里描述的特定行为的方法,在排序后修复了行号。 (使用CSS,特别是content属性和与计数器相关的属性/函数 。)

   test       
Col 1 Col 2

foo

quuz

bar quux
baz baz
Rownums Col 1 Col 2 More Rownums

foo

bar

quuz baz
fred quux

如果您的浏览器与CSS2.1兼容,那么您可以使用tr:before而不是td:first-child:在样本1之前。( Mozilla现在仅在trunk中支持此… )

在示例2中,您可以看到如何将行号列放在任何位置,而不仅仅是在第一列中。

这将跳过第一列的排序,并允许第二列的排序。 只需为从第一列开始的所有列设置true / false为零。

  
 $("table").tablesorter({ headers: {4: {sorter: false},8: {sorter: false}} }); 

Brian Fisher的答案是正确的,但在大型表格中它太慢了(在我的例子中是+1600行)。 我改进了遍历每一行的方式。 其他一切都是一样的。

 $(function() { // add new widget called indexFirstColumn $.tablesorter.addWidget({ // give the widget a id id: "indexFirstColumn", // format is called when the on init and when a sorting has finished format: function(table) { // loop all tr elements and set the value for the first column $(table).find("tr td:first-child").each(function(index){ $(this).text(index+1); }) } }); $("table").tablesorter({ widgets: ['zebra','indexFirstColumn'] }); }); 

人力资源管理。 从tablesorter重组表的方法来看,我很确定这不是完全可能的。 Tablesorter将每个tr逐个拉出DOM并根据索引字段对它们进行排序,重新插入整个tr而不以任何方式更改tr的内容。 然后,您所请求的解决方案需要在每次排序后重复遍历表并重新枚举第一列。 Tablesorter确实有一个插件方法,由zebrastripe和其他扩展使用。 也许这可以用来挂钩排序方法?

Stobor的答案是完美的。 唯一的问题是需要等到表完全呈现以放置数字。

一些观察:

  • 您需要为此方法提供一个空列放数字。
  • 如果表中有标题,则必须使用标记THEAD和TBODY让tablesorter仅对TBODY部分中的数据进行排序。
  • 如果你的表中有一个页脚,你必须将它从TBODY部分中取出以避免使用tablesorter对其内容进行排序,同时你必须使用标签TH代替TD以避免对页脚进行编号。

注意:Abdul显示的方法仅限于用户按指示的列排序,但是当选择其他非限制列的订单时,其内容始终与行的其余部分一起排序。