Javascript 带连字符的Tablesorter排序数字字段

Javascript 带连字符的Tablesorter排序数字字段,javascript,tablesorter,Javascript,Tablesorter,我有一个以YYYY-#####格式绑定数据的表。在某些情况下,可能存在值2012-456和2012-1234。默认情况下,2012-1234将在2012-456之前进行排序。如果我将排序更改为“数值”,那么它将丢弃其他年份(例如:将按照2012-456、2013-555、2012-1234的顺序排序)。我猜如果少于4位,我将不得不在连字符后面的数字前加0,但我无法让分拣机工作。我已经试过了。addParser,但我对它不熟悉,也没有成功。有什么好文章,我正在寻找或有人知道一种方法来实现这一点 下

我有一个以YYYY-#####格式绑定数据的表。在某些情况下,可能存在值2012-456和2012-1234。默认情况下,2012-1234将在2012-456之前进行排序。如果我将排序更改为“数值”,那么它将丢弃其他年份(例如:将按照2012-456、2013-555、2012-1234的顺序排序)。我猜如果少于4位,我将不得不在连字符后面的数字前加0,但我无法让分拣机工作。我已经试过了。addParser,但我对它不熟悉,也没有成功。有什么好文章,我正在寻找或有人知道一种方法来实现这一点

下面是一个示例数据的图像,该数据排序不正确,需要按年份(前4位)排序,然后按连字符后的数字排序:


**此外,日期的格式显然应该更好,但在这种情况下,我无法调整输入日期的方式。

进一步调试后,我终于能够使.addParser()正常工作,并尽可能地压缩代码。我猜因为我是javascript新手,所以我没有意识到.length在计算html中的空格和/或返回

            $('.tablesorter').tablesorter({
                widgets: ['zebra'],
                headers: {
                    0: {
                        sorter: 'licenseYear'
                    }
                }
            })

            $.tablesorter.addParser({
                id: 'licenseYear',
                is: function (s) {
                    return false;
                },
                format: function (s) {
                    //pad zeros for max length of digits after hyphen
                    var pad = "0000";
                    //replace hyphen with needed zeros to pad number
                    var n = s.replace(/-/, pad.substring(s.length - 5));
                    return n;
                },
                type: 'numeric'
            });

*编辑:在这个线程的帮助下压缩代码,关于padding left:

我有一个默认使用自然排序算法的工具,所以在这种情况下你甚至不需要使用解析器:哇,非常有趣。“自然排序算法”到底在做什么?它工作得很好!它将内容分成“块”,基本上是一组数字或字母,并对它们进行比较。它只比普通的排序慢一点点;优点弥补了它。排序算法来自