我正在开发一个项目,我收到一个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'
关于我能做什么的任何建议?
答案 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));
};