【问题标题】:Javascript DataTables - filter() function not working as expectedJavascript DataTables - filter() 函数未按预期工作
【发布时间】:2014-12-24 19:50:55
【问题描述】:

我正在使用 DataTables javscript 库,我正在尝试根据数值是否大于 60 来过滤掉一行。

我正在尝试遵循以下示例: http://datatables.net/reference/api/filter%28%29

过滤器代码如下所示:

table
    .column( 3 )
    .data()
    .filter( function ( value, index ) {
        return value > 60 ? true : false;
    } )

问题是所有行仍然可见,并且根本没有进行过滤。即使我的函数只是返回 false,所有行仍然可见。这是怎么回事?

JSFiddle 示例

http://jsfiddle.net/1hLcpr3x/

【问题讨论】:

    标签: javascript jquery datatables


    【解决方案1】:

    您要链接的示例是从列中过滤返回的数据数组,而不是行本身。

    您可以通过返回内容并记录它来验证这一点

    var filteredArray = table.column( 3 )
                             .data()
                             .filter( function(value, index) {
                                 return value > 60 ? true : false;
                             })
                             .draw();
    
    console.log(filteredArray);
    

    FIDDLE

    这就是filter 方法的作用,当您使用data() 返回数据时,它会过滤数据,而不是行。

    要过滤适当的行,您需要连接到 DataTables 插件,更具体地说是$.fn.dataTableExt.afnFiltering,然后执行类似的操作

    $.fn.dataTableExt.afnFiltering.push(
        function (oSettings, aData, iDataIndex) {
            return aData[3] < 60;
        }
    );
    

    FIDDLE

    Documentation for DataTables filtering

    【讨论】:

    • 我在一个页面上有多个数据表,我如何确保我的自定义挂钩过滤器只适用于我想要的那个?我可以从传入的设置对象中导出表格吗?
    • @CanÜrek - 你是什么意思它不起作用?它过滤掉任何 60 岁或以上的人,并且在最后一个小提琴中没有超过 59 岁的人的行,所以它工作得很好?
    • 很抱歉这么晚才发表评论...但是 $.fn.dataTableExt.afnFiltering.push 对我不起作用...我不断收到这个 Uncaught TypeError: Cannot read property 'push' of undefined in控制台..
    猜你喜欢
    • 2015-04-11
    • 1970-01-01
    • 2018-02-01
    • 2018-06-27
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2022-01-25
    相关资源
    最近更新 更多