如何清除数据表过滤器?

The*_*ged 5 datatables

即时通讯使用自定义筛选我的数据表使用方法:

$.fn.dataTableExt.afnFiltering.push("custom filter function");
Run Code Online (Sandbox Code Playgroud)

这个函数向我的数据表添加了一个过滤器。

问题是,当我使用 ajax 创建其他数据表对象时,此过滤器仍然存在并应用于与此过滤器无关的其他表。如何清除过滤器或仅将其绑定到第一个数据表?

scr*_*ppy 5

如果您对 $.fn.dataTableExt.afnFiltering 进行推送,则意味着它是一个数组。因此,当您收到数据时,您可以使用以下命令删除此数组中的过滤器引用:

delete  $.fn.dataTableExt.afnFiltering[index or key];
Run Code Online (Sandbox Code Playgroud)

此方法会将元素设置为未定义

或通过使用 javascript 中的 splice 方法。

$.fn.dataTableExt.afnFiltering.splice(index,1);
Run Code Online (Sandbox Code Playgroud)

此方法将从数组中删除元素。所以

var index = $.fn.dataTableExt.afnFiltering.indexOf("custom filter function");
 $.fn.dataTableExt.afnFiltering.splice(index,1);
Run Code Online (Sandbox Code Playgroud)

应该可以解决您的问题(您可以在Javascript 中获得精确度- 按值删除数组项,因为 IE<9 不支持 indexOf)

  • 或者只是删除最后应用的过滤器:`$.fn.dataTableExt.afnFiltering.pop();` (2认同)

小智 5

如果以后准备使用1.10+版本的datatable,搜索插件文档的使用如下所示:

要重置 1.10+ 版本的过滤器,只需添加以下任意内容;

  • $.fn.dataTable.ext.search = [];
  • $.fn.dataTable.ext.search.pop();

在此块之后您可以添加;

  • table.draw();