JQuery表分拣机没有'不能使用日期范围字符串

JQuery table sorter doesn't work with date range string

本文关键字:不能 日期 字符串 范围 拣机 JQuery      更新时间:2023-09-26

我的表中有一列显示了以下文本的变化,其中日期变化

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

正如您在这个fiddle中看到的那样,tablesorter在正确排序时遇到了问题。单击第一列时会进行排序,但第二列不会。我还包含了一些字符串比较表,以表明javascript能够正确识别它们的顺序

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

我尝试添加一个自定义的textExtraction函数,但仍然得到了相同的结果。

表分类器似乎在做一些不同于简单的><的事情来确定字符串值的顺序。有没有一种方法可以改变表分类器来正确地对这一列进行排序?

问题是第二列("Requested Statement…")被检测为日期列,解析器试图将整个字符串转换为日期;这是无效的。

这是一个从表分类器中提取相关功能的演示。结果是:

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

因此,您需要使用textExtraction函数来确定日期(演示):

$('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;
    }
});

请注意,字符串中的第二个日期将被完全忽略。如果你想让第二次约会变得重要,试试这个代码(演示):

$('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;
    }
});