我正在使用
jquery tablesorter插件对表进行排序.我的表格中的列以mm / yy格式显示日期.
<tr> <td class="col-name">...</td> ... <td rel="2000" class="col-dob">10/00</td> ... </tr> <tr> <td class="col-name">...</td> ... <td rel="1986" class="col-dob">11/86</td> ... </tr>
注意:
>每个细胞都有一个独特的类
>日期以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文档通常是无用的.它看起来很多,但缺乏细节.
在这种情况下,它不会告诉您解析器的函数签名.幸运的是,你可以阅读the unminified code来找到它.
在那里我们发现元数据解析器执行此操作:
format: function(s,table,cell) {
这意味着您可以将格式方法调整为:
format: function(s,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,1); },
或者至少与此类似.我实际上没有测试过这个.但它应该至少非常接近.