我使用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>
注意:
我的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。
答案 0 :(得分:9)
我发现,tablesorter文档通常是无用的。 看起来就像它说了很多,但缺乏细节。
在这种情况下,它不会告诉您解析器的函数签名。幸运的是,您可以阅读the unminified code来查找它。
我们发现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);
},
或者至少与此类似。我实际上没有测试过这个。但它应该至少非常接近。
答案 1 :(得分:0)
我想你会发现你的问题是Date构造函数和你传递的2位数年份字符串而没有消歧:new Date(dateSplit[1], dateSplit[0], 1);
我认为你不能(轻松)基于解析器中的s访问rel。 s包含单元格的全部内容吗?您可以在单元格中的数据中执行某些操作,例如:<span style="display : none">CC</span>MM/YY
,删除标记,然后在解析中将CC与YY结合使用吗?