数据表的排序重置了我的日期范围搜索

弗雷德·A

所以我在数据表中有一个日期列,其中有一个使用日期范围而不是日期选择器构建的自定义过滤器。

$('#idOfTheDateRangePicker').on('apply.daterangepicker',                 
    function(ev, picker) {

        var start_date = picker.startDate.format('DD.MM.YYYY');
        var end_date = picker.endDate.format('DD.MM.YYYY');

        var position = $(this).attr('position');

        var min_date = createDate(start_date);
        var max_date = createDate(end_date);

        var filter = function(settings, data, index) {
            var data_date = createDate(data[position]);

            if(data_date >= min_date && data_date <= max_date) {
                return true;
            } else {
                return false;
            }

        };

        $.fn.dataTable.ext.search.push(filter);
        var table = $('#thisTableId').DataTable();
        table.draw();


    $.fn.dataTable.ext.search.splice($.fn.dataTable.ext.search.indexOf(filter, 1));

});

对于返回日期在给定日期范围内的行,此过滤器效果很好。

问题是,当我单击列标题上的排序功能时,它将重置日期范围过滤器并显示所有行。但是,排序不会破坏我的所有非范围自定义过滤器,例如使用select或datepicker的过滤器,这些过滤器会将单个值传递给表列搜索。

我如何才能使上面的日期范围过滤器即使在单击排序按钮时仍适用于表格?

普密沙

工作演示:http : //jsfiddle.net/thecreativedev/7895nv2b/

$(document).ready(function() {
    $('input[name="daterange"]').daterangepicker();

    var dataSet = [
        ["Tiger Nixon", "System Architect", "Edinburgh", "5421", "2018/04/25", "$320,800"],
        ["Garrett Winters", "Accountant", "Tokyo", "8422", "2018/07/25", "$170,750"],
        ["Ashton Cox", "Junior Technical Author", "San Francisco", "1562", "2018/01/12", "$86,000"],
        ["Cedric Kelly", "Senior Javascript Developer", "Edinburgh", "6224", "2018/03/29", "$433,060"],
        ["Airi Satou", "Accountant", "Tokyo", "5407", "2018/11/28", "$162,700"],
        ["Brielle Williamson", "Integration Specialist", "New York", "4804", "2018/12/02", "$372,000"],
        ["Herrod Chandler", "Sales Assistant", "San Francisco", "9608", "2018/08/06", "$137,500"],
        ["Rhona Davidson", "Integration Specialist", "Tokyo", "6200", "2018/10/14", "$327,900"],
        ["Colleen Hurst", "Javascript Developer", "San Francisco", "2360", "2018/09/15", "$205,500"],
        ["Sonya Frost", "Software Engineer", "Edinburgh", "1667", "2018/12/13", "$103,600"],
        ["Jena Gaines", "Office Manager", "London", "3814", "2018/12/19", "$90,560"],
        ["Quinn Flynn", "Support Lead", "Edinburgh", "9497", "2018/03/03", "$342,000"],
        ["Charde Marshall", "Regional Director", "San Francisco", "6741", "2018/10/16", "$470,600"],
        ["Haley Kennedy", "Senior Marketing Designer", "London", "3597", "2018/12/18", "$313,500"],
        ["Tatyana Fitzpatrick", "Regional Director", "London", "1965", "2018/03/17", "$385,750"],
        ["Michael Silva", "Marketing Designer", "London", "1581", "2018/11/27", "$198,500"],
        ["Paul Byrd", "Chief Financial Officer (CFO)", "New York", "3059", "2018/06/09", "$725,000"],
        ["Gloria Little", "Systems Administrator", "New York", "1721", "2018/04/10", "$237,500"],
        ["Bradley Greer", "Software Engineer", "London", "2558", "2018/10/13", "$132,000"],
        ["Dai Rios", "Personnel Lead", "Edinburgh", "2290", "2018/09/26", "$217,500"],
        ["Jenette Caldwell", "Development Lead", "New York", "1937", "2018/09/03", "$345,000"],
        ["Yuri Berry", "Chief Marketing Officer (CMO)", "New York", "6154", "2018/06/25", "$675,000"],
        ["Caesar Vance", "Pre-Sales Support", "New York", "8330", "2018/12/12", "$106,450"],
        ["Doris Wilder", "Sales Assistant", "Sidney", "3023", "2018/09/20", "$85,600"],
        ["Angelica Ramos", "Chief Executive Officer (CEO)", "London", "5797", "2018/10/09", "$1,200,000"],
        ["Gavin Joyce", "Developer", "Edinburgh", "8822", "2018/12/22", "$92,575"],
        ["Jennifer Chang", "Regional Director", "Singapore", "9239", "2018/11/14", "$357,650"],
        ["Brenden Wagner", "Software Engineer", "San Francisco", "1314", "2018/06/07", "$206,850"],
        ["Fiona Green", "Chief Operating Officer (COO)", "San Francisco", "2947", "2018/03/11", "$850,000"],
        ["Shou Itou", "Regional Marketing", "Tokyo", "8899", "2018/08/14", "$163,000"],
        ["Michelle House", "Integration Specialist", "Sidney", "2769", "2018/06/02", "$95,400"],
        ["Suki Burks", "Developer", "London", "6832", "2018/10/22", "$114,500"],
        ["Prescott Bartlett", "Technical Author", "London", "3606", "2018/05/07", "$145,000"],
        ["Gavin Cortez", "Team Leader", "San Francisco", "2860", "2018/10/26", "$235,500"],
        ["Martena Mccray", "Post-Sales support", "Edinburgh", "8240", "2018/03/09", "$324,050"],
        ["Unity Butler", "Marketing Designer", "San Francisco", "5384", "2018/12/09", "$85,675"]
    ];

    var columnDefs = [{
        title: "Name"
    }, {
        title: "Position"
    }, {
        title: "Office"
    }, {
        title: "Extn."
    }, {
        title: "Start date"
    }, {
        title: "Salary"
    }];

    var myTable;

    myTable = $('#example').DataTable({
        "sPaginationType": "full_numbers",
        data: dataSet,
        columns: columnDefs,
        dom: 'Bfrtip', // Needs button container
        select: 'single',
        responsive: true,
        altEditor: true, // Enable altEditor
        buttons: [{
                text: 'Add',
                name: 'add' // do not change name
            },
            {
                extend: 'selected', // Bind to Selected row
                text: 'Edit',
                name: 'edit' // do not change name
            },
            {
                extend: 'selected', // Bind to Selected row
                text: 'Delete',
                name: 'delete' // do not change name
            }
        ]
    });

    $('input[name="daterange"]').on('apply.daterangepicker',
        function(ev, picker) {

            var start_date = picker.startDate.format('YYYY.MM.DD');
            var end_date = picker.endDate.format('YYYY.MM.DD');

            var position = 4;

            var min_date = createDate(start_date);
            var max_date = createDate(end_date);
            var filter = function(settings, data, index) {
                var data_date = createDate(data[position]);

                if (data_date >= min_date && data_date <= max_date) {
                    console.log('if')
                    return true;
                } else {
                    console.log('else')
                    return false;
                }

            };
            $.fn.dataTable.ext.search.push(filter);
            myTable.draw();

        });
});

function createDate(dateString) {
    var year = dateString.substring(0, 4);
    var month = dateString.substring(5, 7);
    var day = dateString.substring(8, 10);
    return new Date(year, month, day).getTime();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章