将fnFilter应用于已修改的表

时间:2015-03-26 10:24:35

标签: javascript filtering jquery-datatables

使用DataTables 1.9.4和JQuery 1.4.4。 我试图创建一个基于可见列过滤某些行的表。该表由AngularJS驱动,如内部控制器。 显示表格时,过滤器工作正常,但此后,如果值更改,则不会更新过滤器。 控制器由一个数组组成(每行一个)。通过它更新表时,不会重新应用过滤器。当数据发生变化时,如何让过滤器重新评估每一行?

由控制器生成的HTML:

<table id="table-status">
    <thead>
        <tr>
            <th>visible</th>
            <th>Name</th>
            <th>Value</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1</td>
            <td>name1</td>
            <td>1</td>
        </tr>
        <tr>
            <td>0</td>
            <td>name2</td>
            <td>2</td>
        </tr>
        <tr>
            <td>1</td>
            <td>name3</td>
            <td>3</td>
        </tr>
    </tbody>
</table>

DataTables初始化:

var oTable = $("#table-status").dataTable( {
"aoColumnDefs": [ { "bVisible": false, "aTargets": [ 0 ] },
                  { "bVisible": true, "aTargets": [ 1 ] },
                  { "bVisible": true, "aTargets": [ 2 ] } ],
    "bSort": false,
    "bFilter": true
} );
oTable.fnFilter("1", 0, false, false, false, false);

1 个答案:

答案 0 :(得分:0)

我不完全确定这是否是您所需要的,但我根据名为Status的列推出了自己的功能来显示或不显示某些行。

我有一个复选框,其中可以包含值0, 1, 23

首先,我得到了关联我想要过滤的值的正则表达式函数:

var filter = "^" + $("#filterStatusCheck option:selected").map(function() {
   return this.value;
}).get().join("|") + "$";

例如,返回^1|2$,这意味着我想过滤值1和2。

然后,我search() DataTable,寻找这些元素(实际上不是我,而是他们的search()方法。

var t = s.getTable().DataTable();
t.column(8).search(filter, true, false).draw();

此处,在索引为8的列上,我这样做是为了搜索,使用上面的过滤器,然后再次draw() DataTable。

在您的情况下,您可能想要弄清楚您可以附加上述代码的事件(可能在行更新后?)。您的filter将为1(可见,对吗?),而您的列搜索将为0(第一列称为可见)。

希望它有所帮助。