使用 jQuery tablesorter 对 mm/yy 日期进行排序
我正在使用 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。
I am using the jquery tablesorter plugin to sort a table. On of my the columns in my table shows the date in mm/yy format.
<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>
Note:
- Each cell has a unique class
- Date is displayed in the mm/yy format
- Cell with date receives the year as well
My jQuery code is as below:
// 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();
My problem is that the tableSorter interprets 00 as year 1900 instead of 2000 and hence the sorted data is not correct.
Any clue how can I resolve this? I am using jQuery 1.2.6 and the latest version of tablesorter.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我想你会发现你的问题是 Date 构造函数和你传递的没有消歧义的 2 位数字年份字符串:
new Date(dateSplit[1], dateSplit[0], 1);
我不知道认为您不能(轻松)根据解析器中的 s 访问 rel 。 s 包含单元格的全部内容吗? 您可以在单元格中的数据中执行一些操作,例如:
CCMM/YY
,去掉标签,然后将 CC 与 YY 组合在你的解析中?I think you will find that your problem is the Date constructor and the 2-digit year string you are passing without disambiguation:
new Date(dateSplit[1], dateSplit[0], 1);
I don't think you can (easily) get access to rel based on s in the parser. Does s contain the entire contents of the cell? Can you do something in the data in the cell like:
<span style="display : none">CC</span>MM/YY
, strip out the tags and then combine CC with YY in your parse?我发现表排序器文档通常毫无帮助。 它看起来好像说了很多,但缺乏细节。
在这种情况下,它不会告诉您解析器的函数签名。 幸运的是,您可以阅读未缩小的代码来找到它。
我们发现元数据解析器执行以下操作:
这意味着您可以将格式方法调整为:
或至少与此类似。 我还没有实际测试过这个。 但至少应该非常接近。
The tablesorter documentation is often rather unhelpful, I've found. It looks like it says a lot, but is lacking in the details.
In this case, it doesn't tell you the function signature for a parser. Fortunately, you can read the unminified code to find it.
There we find that the
metadata
parser does this:This means that you can adjust your format method to:
Or at least similar to that. I haven't actually tested this. But it should be at least very close.