DataTables列可搜索:false也禁用日期范围搜索

时间:2016-05-23 10:56:08

标签: javascript jquery datatable datatables

我有一个Datatbles Table,如下所示: enter image description here

自定义jQueryUI From-To DatePicker用于在我必须创建DateTime列之前工作" searchable:false" 。我这样做是因为我不希望日期时间结果包含在搜索字段过滤器中。

$(document).ready(function() {
var table = $('#myTable').DataTable({       
...,        
    columnDefs: [
            //column 6 set to "not searchable"" 
            { "searchable": false, targets: [6] }
        ]
....
        $('#from').change( function() { 
        table.draw(); } );
        $('#to').change( function() { 
        table.draw(); } );
} );

这是From-To Date范围实施:

//Date Range Picker
$(function() {
$( "#from" ).datepicker({
  onClose: function( selectedDate ) {
    $( "#to" ).datepicker( "option", "minDate", selectedDate );
  }
});
$( "#to" ).datepicker({
  onClose: function( selectedDate ) {
    $( "#from" ).datepicker( "option", "maxDate", selectedDate );
  }
});
});

$.fn.dataTableExt.afnFiltering.push(
    function( oSettings, aData, iDataIndex ) {
        var iFini = document.getElementById('from').value;
        var iFfin = document.getElementById('to').value;
        var iStartDateCol = 6;
        var iEndDateCol = 6;         
);

任何人都可以弄明白, - 搜索的工作方式是什么?

1 个答案:

答案 0 :(得分:1)

我能找到的唯一解决方案是覆盖搜索方法。这样就可以只搜索0-5列,而From-To输入仍然可以使用第6列作为日期范围。

$('.dataTables_filter input').unbind().on('keyup', function() {
    var searchTerm = this.value.toLowerCase();
    $.fn.dataTable.ext.search.push(function(settings, data, dataIndex) 
        {
            if (~data[0].toLowerCase().indexOf(searchTerm)) return true;
            if (~data[1].toLowerCase().indexOf(searchTerm)) return true;
            if (~data[2].toLowerCase().indexOf(searchTerm)) return true;
            if (~data[3].toLowerCase().indexOf(searchTerm)) return true;
            if (~data[4].toLowerCase().indexOf(searchTerm)) return true;
            if (~data[5].toLowerCase().indexOf(searchTerm)) return true;
            return false;
        })
    table.draw(); 
    $.fn.dataTable.ext.search.pop();
})