我有一个日期列,格式为“17/03/2012”。
我希望能够选择开始日期和结束日期,如果上面的 1 个日期列在此日期范围内,它将过滤该列。
下面是我使用的代码:
Start Date: <input type="text" id="dateStart" name="dateStart" size="30">
End Date: <input type="text" id="dateend" name="dateend" size="30">
<script type="text/javascript" charset="utf-8">
$.fn.dataTableExt.afnFiltering.push(
function( oSettings, aData, iDataIndex ) {
var iFini = document.getElementById('dateStart').value;
var iFfin = document.getElementById('dateend').value;
var iStartDateCol = 2;
var iEndDateCol = 2;
iFini=iFini.substring(0,2) + iFini.substring(3,5)+ iFini.substring(6,10)
iFfin=iFfin.substring(0,2) + iFfin.substring(3,5)+ iFfin.substring(6,10)
var datofini=aData[iStartDateCol].substring(0,2) + aData[iStartDateCol].substring(3,5)+ aData[iStartDateCol].substring(6,10);
var datoffin=aData[iEndDateCol].substring(0,2) + aData[iEndDateCol].substring(3,5)+ aData[iEndDateCol].substring(6,10);
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;
}
);
$(function() {
// Implements the dataTables plugin on the HTML table
var $oTable= $("#example").dataTable( {
"sDom": '<"top"><"clear">t<"bottom"i><"clear">',
"iDisplayLength": 20,
"oLanguage": {
"sLengthMenu": 'Show <select><option value="25">25</option><option value="50">50</option><option value="100">100</option><option value="200">200</option></select>'
},
"bJQueryUI": true,
//"sPaginationType": "full_numbers",
"aoColumns": [
null,
null,
{ "sType": "date" }
]
});
$('#dateStart, #dateend').daterangepicker(
{
dateFormat: 'dd/mm/yy',
arrows: true
}
);
/* Add event listeners to the two range filtering inputs */
$('#dateStart').keyup( function() { oTable.fnDraw(); } );
$('#dateend').keyup( function() { oTable.fnDraw(); } );
/* Add event listeners to the two range filtering inputs */
$('#dateStart').change( function() { oTable.fnDraw(); } );
$('#dateend').change( function() { oTable.fnDraw(); } );
/* Add event listeners to the two range filtering inputs */
$('#name').keyup( function() { oTable.fnDraw(); } );
$('#name').change( function() { oTable.fnDraw(); } );
});
</script>
对此的任何帮助建议都会非常有帮助。提前致谢。
最佳答案
我认为 filter API page 中显示的示例就可以了:
$(document).ready(function() {
var oTable = $('#example').dataTable();
/* Add event listeners to the two range filtering inputs */
$('#min').keyup( function() { oTable.fnDraw(); } );
$('#max').keyup( function() { oTable.fnDraw(); } );
} );
您上面包含的范围过滤扩展正在寻找的是一组输入框(可能日期选择器样式的文本框效果最好)。根据我在代码中看到的内容,您应该给他们 ID,dateStart
和dateend
。然后就可以绑定(bind) function() { oTable.fnDraw(); }
到这些框中的某个事件(如上面的代码所示,它们绑定(bind)到 keyup
事件),或者它可以是过滤器按钮或其他任何东西。
但是现在,每次绘制表格(使用 fnDraw()
)时,它都会考虑这些日期并过滤从零开始的 iStartDateCol
和iEndDateCol
基于该范围的列。
更新:更直接的答案 - 只需在您的 document.ready 函数中包含以下内容即可:
$('#dateStart').keyup( function() { oTable.fnDraw(); } );
$('#dateend').keyup( function() { oTable.fnDraw(); } );
关于jquery - 数据表日期过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9773989/