如何为tablesorter jQuery插件定义自定义日期解析器?

0 投票
1 回答
976 浏览
提问于 2025-04-18 05:30

我正在为一个jQuery插件定义一个自定义的日期解析器。这里是我的表格:

使用jquery tablsorter插件的表格

我尝试在我的jQuery中这样定义一个自定义的日期解析器:

<script type="text/javascript" src="{% static 'js/jquery.tablesorter.min.js' %}"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $('.tablesorter').tablesorter();

         // add parser through the tablesorter addParser method 
        $.tablesorter.addParser({
            id: "customDate",
            is: function(s) {
                return /[0-9]{1,2} [a-zA-Z]+, [0-9]{1,2}:[0-9]{1,2}/.test(s);
                //return false
            },
            format: function(s) {
                s = s.replace(/,/,"").replace(/:/," ");
                s = s.replace(/January/,1).replace(/February/,2).replace(/March/,3).replace(/April/,4).replace(/May/,5).replace(/June/,6).replace(/Jully/,7).replace(/August/,8).replace(/September/,9).replace(/October/,10).replace(/November/,11).replace(/December/,12);
                s = s.split(" ");
                s = s[1]*1000000+s[0]*10000+s[2]*100+s[3]
                return s
            },
            type: "numeric"
        });
    });

</script>

但是它没有效果。看起来这个customDate解析器根本没有被调用。日期字段只根据第一个数字(日期中的天数)进行排序。

这是我第一次定义自定义解析器。我查阅了一些相关的资料来完成这个任务:

http://tablesorter.com/docs/example-parsers.html

使用Jquery Tablesorter的日期排序问题

1 个回答

2

我解决了这个问题。我的错误是把 $.tablesorter.addParser 放在了 $(document).ready(function() 这个函数里面...

我现在是这样做的:

        $.tablesorter.addParser({
        id: "customDate",
        is: function(s) {
            return /^[0-9]{1,2} [a-zA-Z]+, [0-9]{1,2}:[0-9]{1,2}$/.test(s);
        },
        format: function(s) {
            s = s.replace(/,/,"").replace(/:/," ");
            s = s.replace(/January/,1).replace(/February/,2).replace(/March/,3).replace(/April/,4).replace(/May/,5).replace(/June/,6).replace(/Jully/,7).replace(/August/,8).replace(/September/,9).replace(/October/,10).replace(/November/,11).replace(/December/,12);
            s = s.split(" ");
            s = s[1]*1000000+s[0]*10000+s[2]*100+s[3];
            return s;
        },
        type: "numeric"
    });

    $(document).ready(function() {
        $('.tablesorter').tablesorter({ 
            headers: { 
                1: { 
                    sorter:'customDate' 
                } 
            } 
        }); 

    });

现在它工作得很好!

撰写回答