我有两个输入(最小日期和最大日期),我想用它们过滤表的结果,问题是DataTables在日期排序方面存在严重问题。我在互联网上读到,对于那些想要 dd/mm/YYYY 格式的人来说有一点问题,他们建议做一个比另一个选项更快但只适用于 DataTables 的搜索字段的“技巧”默认情况下有,但是有两个输入它不起作用。
这个“技巧”包括插入一个不显示日期的 YYYYMMDD 格式,这样用户看不到 DataTables 的内容,但如果他可以执行排序。
<td><span style='display: none;'>20150221</span>21/02/2015</td>
到目前为止,默认 DataTables 浏览器的过滤效果很好,问题是我想要两个条目并放置一个日期范围。使用以下代码,它对我不起作用,它开始过滤良好,但是当我完成编写最大日期时,它不再正确过滤。
问题是我不知道第一个“技巧”是否会影响第二个案例,反之亦然,有相同或类似问题的人能给我一点启发吗?在这里我留下我的代码。
$.fn.dataTableExt.afnFiltering.push(
function( oSettings, aData, iDataIndex ) {
var iFini = document.getElementById('min').value;
var iFfin = document.getElementById('max').value;
var iStartDateCol = 4;
var iEndDateCol = 4;
iFini = iFini.substring(6,10) + iFini.substring(3,5) + iFini.substring(0,2);
iFfin = iFfin.substring(6,10) + iFfin.substring(3,5) + iFfin.substring(0,2);
var datofini=aData[iStartDateCol].substring(6,10) + aData[iStartDateCol].substring(3,5)+ aData[iStartDateCol].substring(0,2);
var datoffin=aData[iEndDateCol].substring(6,10) + aData[iEndDateCol].substring(3,5)+ aData[iEndDateCol].substring(0,2);
if (iFini === "" && iFfin === "") {
return true;
} else if (iFini <= datofini && iFfin === "") {
return true;
} else if (iFfin >= datoffin && iFini === "") {
return true;
} else if (iFini <= datofini && iFfin >= datoffin) {
return true;
}
return false;
}
);
var table_filter = $('#DataTables_Table_4').dataTable();
$('#min').keyup( function() { table_filter.fnDraw(); } );
$('#max').keyup( function() { table_filter.fnDraw(); } );
最后在尝试了所有之后,我尝试了moment.js库并修改了过滤器功能以支持dd-mm-YYYY格式
http://momentjs.com/
我把代码留在这里:
没有必要删除它的“技巧”来工作。