当前位置:  开发笔记 > 前端 > 正文

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

如何解决《使用jQuerytablesorter对mm/yy日期进行排序》经验,为你挑选了1个好方法。

我正在使用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.



1> David..:

我发现,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);
},

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

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有