jQuery DataTable排序美国日期字符串

时间:2014-07-09 15:49:25

标签: jquery html asp.net internet-explorer-8 datatables

我正在开发一个项目,我收到一个jQuery DataTable的日期作为字符串格式(mm / dd / yyyy)。当我进行排序时,它会将其排序为一个字符串,导致它按月顺序分组,这是不正确的。我想使用'sType:date'来处理排序,但由于它不是日期对象,因此它不会对它进行排序。有没有一种方法可以将它解析为日期,因为它被添加到数据表中?

我确实找到了另一种方法,并对其进行了正确排序,但它仅适用于ie8以外的浏览器(该表有~1000行,导致脚本超时错误,chrome立即执行)

jQuery.fn.dataTableExt.oSort['us_date-asc'] = function(a,b) { 
            if($(a).text()=="" && $(b).text()==""){
                return 0;
            }
            else if($(a).text()=="" || $(b).text()==""){
                return $(a).text()=="" ? -1 : 1;
            }
            else{
                var x = new Date($(a).text());
                var y = new Date($(b).text());
                return ((x < y) ? -1 : ((x > y) ?  1 : 0)); 
            }
    }; 

    jQuery.fn.dataTableExt.oSort['us_date-desc'] = function(a,b) {
        if($(a).text()=="" && $(b).text()==""){
                return 0;
        }
        else if($(a).text()=="" || $(b).text()==""){
            return $(a).text()=="" ? 1 : -1;
        }
        else{
            var x = new Date($(a).text());
            var y = new Date($(b).text());
            return ((x < y) ? 1 : ((x > y) ?  -1 : 0)); 
       }
    }; 

然后我可以用

"sType": 'us_date'

关于我能做什么的任何建议?

1 个答案:

答案 0 :(得分:1)

我设法让它在IE8中几乎没有工作而不会导致页面超时。使用14列对~1000条记录进行排序需要约2秒钟。 (5个隐藏的列)。 Chrome会立即执行此操作。

jQuery.fn.dataTableExt.oSort['us_date-pre'] = function(a){
    if($(a).text()==""){
        return "19000101" * 1;
    }
    else{
        var usDatea = $(a).text().split('/');
        return (usDatea[2] + usDatea[0] + usDatea[1]) * 1;
    }
}
jQuery.fn.dataTableExt.oSort['us_date-asc']  = function(a,b) {
    return ((a < b) ? -1 : ((a > b) ?  1 : 0));
};

jQuery.fn.dataTableExt.oSort['us_date-desc'] = function(a,b) {
   return ((a < b) ? 1 : ((a > b) ?  -1 : 0));
};