首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >datatable上的数据采集器插件。不能排序和搜索

datatable上的数据采集器插件。不能排序和搜索
EN

Stack Overflow用户
提问于 2015-11-17 09:41:38
回答 1查看 1.1K关注 0票数 1

我的问题是数据表上的Daterangepicker。

我找到了一个集成了一个解决方案的人,实际上它很好用。

http://webdevgirl.co.za/

不幸的是,当页面初始化时,搜索和排序不起作用。

但是,当您使用输入数据采集器执行搜索时,您想要排序或搜索:它有效!!

我对JS不是很在行,这就是为什么我需要你的帮助!

下面是我想要做的事情的一个例子:

https://jsfiddle.net/5qknp86r/

联署材料:

代码语言:javascript
复制
        $(document).ready(function() {
    //DATATABLE
    //To display datatable without search and page length select, and to still have pagination work, instantiate like so
    var oTable=$('#table_id').dataTable({

        //"sDom":"tp",
        "pageLength": 10,
        "pagination":true,
            // Date Sorting
        columnDefs: [
           { type: 'date-eu', targets: 1}
         ],
     //// order table onload
"order": [[ 1, 'desc' ]],
    });
//DATE RANGE
//set global vars that are set by daterange picker, to be used by datatable
var startdate;
var enddate;
//instantiate datepicker and choose your format of the dates
$('#reportrange').daterangepicker({
        ranges: {
           "Aujourd'hui": [moment(), moment()],
           'Hier': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
           'Les 7 derniers jours': [moment().subtract(6, 'days'), moment()],
           'Les 30 derniers jours': [moment().subtract(29, 'days'), moment()],
           'Ce mois-ci': [moment().startOf('month'), moment().endOf('month')],
           'Le mois dernier': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
        }
,
    "opens": "right",
    format: 'DD/MM/YYYY'

},
function(start, end,label) {
// Parse it to a moment
var s = moment(start.toISOString());
var e = moment(end.toISOString());
startdate = s.format("YYYY-MM-DD");
enddate = e.format("YYYY-MM-DD");
});
//Filter the datatable on the datepicker apply event
$('#reportrange').on('apply.daterangepicker', function(ev, picker) {
startdate=picker.startDate.format('YYYY-MM-DD');
enddate=picker.endDate.format('YYYY-MM-DD');
oTable.fnDraw();
});

$.fn.dataTableExt.afnFiltering.push(
function( oSettings, aData, iDataIndex ) {
if(startdate!=undefined){
// 0 here is the column where my dates are.
//Convert to YYYY-MM-DD format from DD/MM/YYYY
var coldate = aData[1].split("/");
var d = new Date(coldate[2], coldate[1]-1 , coldate[0]);
var date = moment(d.toISOString());
date =    date.format("YYYY-MM-DD");

//Remove hyphens from dates
dateMin=startdate.replace(/-/g, "");
dateMax=enddate.replace(/-/g, "");
date=date.replace(/-/g, "");

//console.log(dateMin, dateMax, date);

// run through cases to filter results
if ( dateMin == "" && date <= dateMax){
return true;
}
else if ( dateMin =="" && date <= dateMax ){
return true;
}
else if ( dateMin <= date && "" == dateMax ){
return true;
}
else if ( dateMin <= date && date <= dateMax ){
return true;
}

// all failed
return false;
}
}
);


} );

请帮帮忙!

谢谢大家(为我糟糕的英语道歉)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-17 11:08:14

只需添加此函数

$.fn.dataTableExt.afnFiltering.push(...

转到

.on(‘apply.daterangepicker’,函数(ev,选择符){.

就像这样:

代码语言:javascript
复制
$(document).ready(function () {
            //DATATABLE
            //To display datatable without search and page length select, and to still have pagination work, instantiate like so
            var oTable = $('#table_id').dataTable({
                //"sDom":"tp",
                "pageLength": 10,
                "pagination": true,
                // Date Sorting
                columnDefs: [
                   { type: 'date-eu', targets: 1 }
                ],
                //// order table onload
                "order": [[1, 'desc']],
            });
            //DATE RANGE
            //set global vars that are set by daterange picker, to be used by datatable
            var startdate;
            var enddate;
            //instantiate datepicker and choose your format of the dates
            $('#reportrange').daterangepicker({
                ranges: {
                    "Aujourd'hui": [moment(), moment()],
                    'Hier': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
                    'Les 7 derniers jours': [moment().subtract(6, 'days'), moment()],
                    'Les 30 derniers jours': [moment().subtract(29, 'days'), moment()],
                    'Ce mois-ci': [moment().startOf('month'), moment().endOf('month')],
                    'Le mois dernier': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
                }
            ,
                "opens": "right",
                format: 'DD/MM/YYYY'

            },
            function (start, end, label) {
                // Parse it to a moment
                var s = moment(start.toISOString());
                var e = moment(end.toISOString());
                startdate = s.format("YYYY-MM-DD");
                enddate = e.format("YYYY-MM-DD");
            });
            //Filter the datatable on the datepicker apply event
            $('#reportrange').on('apply.daterangepicker', function (ev, picker) {
                startdate = picker.startDate.format('YYYY-MM-DD');
                enddate = picker.endDate.format('YYYY-MM-DD');
                $.fn.dataTableExt.afnFiltering.push(
                function (oSettings, aData, iDataIndex) {
                    if (startdate != undefined) {
                        // 0 here is the column where my dates are.
                        //Convert to YYYY-MM-DD format from DD/MM/YYYY
                        var coldate = aData[1].split("/");
                        var d = new Date(coldate[2], coldate[1] - 1, coldate[0]);
                        var date = moment(d.toISOString());
                        date = date.format("YYYY-MM-DD");

                        //Remove hyphens from dates
                        dateMin = startdate.replace(/-/g, "");
                        dateMax = enddate.replace(/-/g, "");
                        date = date.replace(/-/g, "");

                        //console.log(dateMin, dateMax, date);

                        // run through cases to filter results
                        if (dateMin == "" && date <= dateMax) {
                            return true;
                        }
                        else if (dateMin == "" && date <= dateMax) {
                            return true;
                        }
                        else if (dateMin <= date && "" == dateMax) {
                            return true;
                        }
                        else if (dateMin <= date && date <= dateMax) {
                            return true;
                        }

                        // all failed
                        return false;
                    }
                }
                );

                oTable.fnDraw();
            });
        });

这是工作的JsFiddle (我希望这是你想要的)

更新-第二个问题:

对于第二个问题,您在

代码语言:javascript
复制
$('#reportrange2').on('apply.daterangepicker', function(ev, picker) {...

...you需要改变

代码语言:javascript
复制
var coldate = aData[1].split("/");

代码语言:javascript
复制
var coldate = aData[6].split("/");

因为aData[columnNumber]

这是JSFiddle

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33753574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档