首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改TableSorter排序条件

问更改TableSorter排序条件
EN

Stack Overflow用户
提问于 2016-01-28 23:54:01
回答 1查看 479关注 0票数 1

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

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

问题是,有些书的名字以数字开头(例如“1984年”或“海底20.000里”)。MySQL将这些书籍放在最前面,而不是其他任何以字母开头的书籍。我对此没有异议,但TableSorter中出现了一个奇怪的" bug“(可能不是真正的bug):它只对以数字开头的标题进行排序(将它们从表的乞求位置移到末尾),而保持其余(以及绝大多数)项的顺序不变。我想我已经找到了问题的根源,但还找不到(真正的)解决方案:

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

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

代码语言:javascript
复制
  <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),从而覆盖解析器自动决定的内容?

EN

回答 1

Stack Overflow用户

发布于 2016-01-29 06:09:19

Tablesorter尝试确定列中包含的数据类型,方法是从第一行开始向下扫描,直到其中一个解析器找到匹配项。它不应该,但是当它看到"20.000个联盟...“它认为它只查看数字数据,因此解析器被设置为"digit“。

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

代码语言:javascript
复制
$('table').tablesorter({
  headers : {
    // using a zero-based column index
    0 : { sorter: 'text' }
  }
});

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35066063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档