2016-01-28 29 views
1

我试图使用jQuery的TableSorter插件,来排序的,我通过查询与PHP MySQL数据库创建书一表。变化的tablesorter排序标准

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

的事情是,有些书必须以数字开头的名称(如“1984”或“20.000联盟在海”)。在任何以字母开头的其他书籍之前,MySQL会将这些书放在最前面。我有这个没有争吵,但一个奇怪的“错误”(不是一个真正的错误也许)用的tablesorter出现:它只是排序起始号,标题(从表中的beggining到底换挡它们),留下其余的(和绝大多数)的订单不变。我认为我已经查明了问题的根源,但还找不到(真实的)解决方案:

看起来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)手动从而重写什么解析器自动决定办法迫使/设置任何给定的列的排序标准??

回答

0

的tablesorter试图通过从第一行和扫描开始向下直到解析器之一命中的匹配,以确定包含在列的数据的类型。它不应该,但是当它看到“20.000联赛......”它认为它在看数字只有数据,所以解析器被设置为“数字”。

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

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

如果你有兴趣,我也有一个fork of tablesorter,其中包括,但仍然需要加载一个ignore leading articles parser忽略重要文章“A”的正确排序标题,“一个”和“” 。其他语言也被支持。