JQuery表分类器不适用于日期范围字符串

时间:2014-10-31 15:45:13

标签: javascript jquery html tablesorter string-comparison

我的表格中有一列显示以下文字的变体,日期各不相同

Requested Statement 7/1/2014 - 9/16/2014

tablesorter无法正确排序,正如您可以在这个小提琴中看到的那样。第一列将在单击时排序,但第二列不会。我还包括一些字符串比较表,以显示javascript正确识别它们应该处于的顺序。

http://jsfiddle.net/kfu4ragh/1/

我尝试添加自定义textExtraction功能,但我仍然得到相同的结果。

似乎tablesorter正在执行与简单><不同的操作来确定字符串值的顺序。有没有办法可以改变tablesorter来正确排序这个列?

1 个答案:

答案 0 :(得分:1)

问题是第二列(&#34;请求语句......&#34;)被检测为日期列,解析器正试图将整个字符串转换为日期;这是无效的。

这是a demo with the relevant extracted out functions from tablesorter。结果是:

// start with "Requested Statement 7/1/2014 - 9/16/2014"
"Requested Statement 2014/7/1 / 9/16/2014" => 0

因此,您需要使用textExtraction函数来定位日期(demo):

$('table').tablesorter({
    textExtraction : function(node){
        var txt = $(node).text();
        if (/request/i.test(txt)) {
            // return the 3rd block (first date in range)
            txt = txt.split(' ')[2];
        }
        return txt;
    }
});

请注意,字符串中的第二个日期将被完全忽略。如果您想使第二个日期重要,请尝试使用此代码(demo):

$('table').tablesorter({
    textExtraction : function(node){
        var d1, d2,
            txt = $(node).text();
        if (/request/i.test(txt)) {
            // return the 3rd block (first date in range)
            txt = txt.split(' ');
            d1 = $.tablesorter.formatFloat(new Date(txt[2]).getTime());
            d2 = $.tablesorter.formatFloat(new Date(txt[4]).getTime());
            // add the times together - there is likely a better
            // method but this works in this situation
            txt = d1 + d2;
        }
        return txt;
    }
});