使用jQuery tablesorter对mm / yy日期进行排序

我使用jquery tablesorter插件对表进行排序。 我的表格中的列以mm / yy格式显示日期。

 ... ... 10/00 ...   ... ... 11/86 ...  

注意:

  • 每个单元格都有一个独特的类
  • 日期以mm / yy格式显示
  • 带有日期的单元格也会收到年份

我的jQuery代码如下:

 // add parser through the tablesorter addParser method $.tablesorter.addParser({ // set a unique id id: 'user-birthdate', is: function(s) { // return false so this parser is not auto detected return false; }, format: function(s) { // format your data for normalization var dateSplit = s.split('/'); if(2 !== dateSplit.length) return 0; return new Date(dateSplit[1], dateSplit[0], 1); }, // set type, either numeric or text type: 'numeric' }); myClass.init = function() { $('.module .user table').tablesorter({ sortList: [[0,0]], widgets: ['zebra'], headers: { 5: { sorter:'user-birthdate' } } }); } myClass.init(); 

我的问题是tableSorter将00解释为1900而不是2000,因此排序的数据不正确。

任何线索如何解决这个问题? 我正在使用jQuery 1.2.6和最新版本的tablesorter。

我发现,tablesorter文档通常是无用的。 它看起来很多,但缺乏细节。

在这种情况下,它不会告诉您解析器的函数签名。 幸运的是,您可以阅读未经授权的代码来查找它。

在那里我们发现metadata解析器执行此操作:

 format: function(s,table,cell) { 

这意味着您可以将格式方法调整为:

 format: function(s, table, cell) { // format your data for normalization var dateSplit = s.split('/'); var year = $(cell).attr('rel'); if(2 !== dateSplit.length) return 0; return new Date(year, dateSplit[0], 1); }, 

或者至少与此类似。 我实际上没有测试过这个。 但它应该至少非常接近。

我想你会发现你的问题是Date构造函数和你没有消除歧义的2位数年份字符串: new Date(dateSplit[1], dateSplit[0], 1);

我认为你不能(轻松)基于解析器中的s访问rel。 s包含单元格的全部内容吗? 您可以在单元格中的数据中执行以下操作: CCMM/YY ,去掉标签然后在解析中将CC与YY结合使用?