Jquery 更改表排序器排序条件

Jquery 更改表排序器排序条件,jquery,tablesorter,Jquery,Tablesorter,我正在尝试使用jQuery插件,对通过PHP查询MySQL数据库创建的图书表进行排序 该表最初由MySQL引擎按标题排序(orderbybook.title,在查询中),然后用户可以通过TableSorter(页数、作者姓名、出版日期等)以不同的方式对表进行排序 问题是,有些书的名字是以数字开头的(比如“1984”或“海底20000联赛”)。MySQL将这些书放在最上面,排在任何其他以字母开头的书之前。我并不反对这一点,但是TableSorter出现了一个奇怪的“bug”(可能不是真正的bug)

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

该表最初由MySQL引擎按标题排序(
orderbybook.title
,在查询中),然后用户可以通过TableSorter(页数、作者姓名、出版日期等)以不同的方式对表进行排序

问题是,有些书的名字是以数字开头的(比如“1984”或“海底20000联赛”)。MySQL将这些书放在最上面,排在任何其他以字母开头的书之前。我并不反对这一点,但是TableSorter出现了一个奇怪的“bug”(可能不是真正的bug):它只对开始标题的数量进行排序(将标题从表格的开始位置移到末尾),其余(以及绝大多数)项目的顺序保持不变。我想我已经找到了问题的根源,但还没有找到(真正的)解决方案:

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

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

  <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>

基础知识
基础知识
基础知识
123
123
01/01/1970 

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

Tablesorter试图通过从第一行开始向下扫描直到其中一个解析器找到匹配项来确定列中包含的数据类型。它不应该这样做,但是当它看到“20000联赛…”时,它认为它只查看数字数据,所以解析器被设置为“数字”

要覆盖此行为,请为该列设置
标题
选项。一旦设置,列数据将不再自动检测

$('table').tablesorter({
  headers : {
    // using a zero-based column index
    0 : { sorter: 'text' }
  }
});
如果你感兴趣的话,我还有一个,其中包括,但仍然需要加载,一个适当的排序标题,忽略了领先的文章“a”,“an”和“The”。还支持其他语言