【问题标题】:jQuery DataTable Sort US Date StringjQuery DataTable 对美国日期字符串进行排序
【发布时间】:2014-07-09 15:49:25
【问题描述】:

我正在做一个项目,我正在接收 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'

对我能做什么有什么建议吗?

【问题讨论】:

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


    【解决方案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));
    };
    

    【讨论】:

    • +1,是的 - 这是一个很好的解决方案。您应该接受自己的答案,将来可能会帮助其他人,同时将其标记为已解决。
    猜你喜欢
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 2021-12-18
    • 2016-04-04
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    相关资源
    最近更新 更多