更改TableSorter排序条件

时间:2016-01-28 15:54:01

标签: jquery tablesorter

我正在尝试使用jQuery TableSorter插件,通过使用PHP查询MySQL数据库来对我创建的书籍表进行排序。

该表最初由MySQL引擎按标题排序(查询中为ORDER BY Book.Title),然后用户可以通过TableSorter以不同的方式对表进行排序(页数,作者姓名,发布日期) ,& c。)。

事实上,有些书的名字以数字开头(例如“1984”或“20.000海底联盟”)。 MySQL将这些书放在首位,在任何其他以字母开头的书之前。我没有与此争吵,但TableSorter出现了一个奇怪的“错误”(可能不是一个真正的错误):它只对数字起始标题进行排序(将它们从表格的开始转移到结尾),剩下的就是(绝大多数商品的订单不变。我想我已经找到了问题的根源,但还没找到(真正的)解决方案:

似乎TableSorter只查看第一行来确定列的类型并将其视为数字,因为第一个元素是一个标题以数字开头的书,然后忽略任何以一个数字开头的单元格字母字符。如果我颠倒原始排序的顺序(将MySQL查询更改为ORDER BY Book.Title DESC),那么第一个元素是一个以字母(Z或最近的一个)开头的书,TableSorter认为它是一个字母数字列并排序它很好,但随后表格以不寻常的尴尬顺序呈现给用户。

对于那些有同样问题的人(我不认为我是第一个碰到这个问题,但我找不到任何与此“错误”有关的帖子,也没有办法解决它),我设法设计了一个快速修复:首先放入一个隐藏的行,强制每个列排序标准到正确的行,如下所示:

  <tr>
      <td class = "row-hidden">ABC</td> <!-- Title -->
      <td class = "row-hidden">ABC</td> <!-- Subtitle -->
      <td class = "row-hidden">ABC</td> <!-- Author -->
      <td class = "row-hidden">123</td> <!-- Pages -->
      <td class = "row-hidden">123</td> <!-- Quotes -->
      <td class = "row-hidden">01/01/1970</td> <!-- Publication Date -->
      <td class = "row-hidden"></td> <!-- No Sorting Required -->
  </tr>

但这只是一个旁路,我想知道是否有办法解决实际问题,基本上问题是:有没有办法强制/设置任何给定列的排序标准(通过jQuery )手动从而覆盖解析器自动决定的内容??

1 个答案:

答案 0 :(得分:0)

Tablesorter尝试通过从第一行开始并向下扫描直到其中一个解析器命中匹配来确定列中包含的数据类型。它不应该,但当它看到“20.000 Leagues ......”时,它认为它正在查看仅数字数据,因此解析器设置为“数字”。

要覆盖此行为,请为该列设置headers选项。设置后,不再自动检测列数据。

$('table').tablesorter({
  headers : {
    // using a zero-based column index
    0 : { sorter: 'text' }
  }
});

如果您感兴趣,我还有一个fork of tablesorter,其中包含但仍需要加载ignore leading articles parser,它会通过忽略主要文章“A”,“An”来正确排序标题和“The”。还支持其他语言。