数据表日期过滤器 [英] datatables date filter

查看:100
本文介绍了数据表日期过滤器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Date列,格式为'17 / 03/2012'。



我希望能够选择开始和结束日期,如果1日期上面的列在此日期范围内,将过滤列。



以下是使用代码im:

 开始日期:< input type =textid =dateStartname =dateStartsize =30> 
结束日期:< input type =textid =dateendname =dateendsize =30>

< script type =text / javascriptcharset =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(i Fini< = datofini&&& iFfin ==)
{
return true;
}
else if(iFfin> = datoffin&& iFini ==)
{
return true;
}
else if(iFini< = datofini&& iFfin> = datoffin)
{
return true;
}
返回false;
}
);

$(function(){
//实现HTML表上的dataTables插件
var $ oTable = $(#example)。dataTable({
sDom:'<top><clear> t<bottomi><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 ,
//sPaginationType:full_numbers,
aoColumns:[
null,
null,
{sType:date}
]
});


$('#dateStart,#dateend')。daterangepicker(
{
dateFormat:'dd / mm / yy',
箭头:true
}

);


/ *向两个范围过滤输入添加事件侦听器* /
$('#dateStart')。keyup(function(){oTable.fnDraw(); });
$('#dateend')。keyup(function(){oTable.fnDraw();});

/ *将事件侦听器添加到两个范围过滤输入* /
$('#dateStart')。change(function(){oTable.fnDraw();});
$('#dateend')。change(function(){oTable.fnDraw();});

/ *将事件侦听器添加到两个范围过滤输入* /
$('#name')。keyup(function(){oTable.fnDraw();});
$('#name')。change(function(){oTable.fnDraw();});
});

< / script>

有关这方面的帮助建议将非常有帮助。感谢提前。

解决方案

我认为这个例子显示在过滤器API页面将会诀窍:

  $(文件).ready(function(){
var oTable = $('#example')。dataTable();

/ *将事件侦听器添加到两个范围过滤输入* /
$('#min')。keyup(function(){oTable.fnDraw();});
$('#max')。keyup(function(){oTable.fnDraw() });
});

您上面包括的范围过滤扩展是寻找一组输入框(可能datepicker风格的文本框可以工作最好)。您应该通过代码中的 dateStart dateend 给他们ID。然后你可以绑定 function(){oTable.fnDraw(); } 到这些框中的某个事件(如上面的代码中,它们绑定到 keyup 事件),或者它可以是过滤器按钮或任何。



但现在,每次绘制表时(使用 fnDraw()),它将考虑到日期并根据该范围过滤基于零的 iStartDateCol iEndDateCol 列。



更新:更直接的回答 - 只需在您的document.ready函数中包含以下内容:

  $('#dateStart')。keyup(function(){oTable.fnDraw();}); 
$('#dateend')。keyup(function(){oTable.fnDraw();});


I have one Date column, formatted '17/03/2012'.

I would like to be able select a start and end date and if the 1 date column above is within this date range it will filter the column.

Below is the code im using:

        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>

Any help advice on this would bve extremely helpful. Thanks in advance.

解决方案

I think the example that's shown in the filter API page will do the trick:

$(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(); } );
} );

What the range filtering extension you've included up above is looking for is a set of input boxes (probably datepicker style textboxes would work best). You should give them the ID's, by what I see in your code, dateStart and dateend. Then you can bind function() { oTable.fnDraw(); } to some event on either of those boxes ( like in the code above, they're bound to the keyup event) or it could be a filter button or whatever.

But now, each time that the table is drawn (using fnDraw()) it will take into account those dates and filter your zero-based iStartDateCol and iEndDateCol columns based on that range.

UPDATE: a more direct answer - just include the following in your document.ready function:

$('#dateStart').keyup( function() { oTable.fnDraw(); } );
$('#dateend').keyup( function() { oTable.fnDraw(); } );

这篇关于数据表日期过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆