JavaScript DataTables - filter()函数未按预期工作

13

我正在使用DataTables JavaScript库,试图根据数值是否大于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/

1个回答

16

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

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

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

DataTables 过滤的文档


我在页面上有多个数据表,如何确保我的自定义挂钩过滤器只与我想要的那个表一起工作?我能从传递的设置对象中推导出表格吗? - Numeron
@CanÜrek - 你说它不起作用是什么意思?它过滤掉了年龄在60岁或以上的人,而在最后一个fiddle中,没有任何年龄大于59岁的人,所以它完全正常工作。 - adeneo
抱歉晚了一些才评论...但是$.fn.dataTableExt.afnFiltering.push对我不起作用...我在控制台中不断收到Uncaught TypeError: Cannot read property 'push' of undefined。 - Azima

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接