我使用以下方法对我的数据表使用自定义过滤:
$.fn.dataTableExt.afnFiltering.push("custom filter function");
此函数向我的数据表添加一个过滤器。
问题是,当我使用 ajax 创建其他数据表对象时,此过滤器会持续存在并应用于与此过滤器无关的其他表。如何清除过滤器或仅将其绑定到第一个数据表?
我使用以下方法对我的数据表使用自定义过滤:
$.fn.dataTableExt.afnFiltering.push("custom filter function");
此函数向我的数据表添加一个过滤器。
问题是,当我使用 ajax 创建其他数据表对象时,此过滤器会持续存在并应用于与此过滤器无关的其他表。如何清除过滤器或仅将其绑定到第一个数据表?
如果你对 $.fn.dataTableExt.afnFiltering 进行推送,则意味着它是一个数组。因此,当您收到数据时,可以使用以下方法删除此数组中的过滤器引用:
delete $.fn.dataTableExt.afnFiltering[index or key];
此方法会将元素设置为未定义
或者通过使用 javascript 中的 splice 方法。
$.fn.dataTableExt.afnFiltering.splice(index,1);
此方法将从数组中删除元素。所以
var index = $.fn.dataTableExt.afnFiltering.indexOf("custom filter function");
$.fn.dataTableExt.afnFiltering.splice(index,1);
应该可以解决您的问题(您可以在这里精确地使用 Javascript - 按值删除数组项,因为 IE<9 不支持 indexOf)
如果以后要使用1.10+版本的datatable,搜索插件文档的使用如下图所示:
要重置版本 1.10+ 的过滤器,只需添加以下任何内容;
$.fn.dataTable.ext.search = [];
$.fn.dataTable.ext.search.pop();
在此块之后,您可以添加;
table.draw();
$.fn.dataTableExt.afnFiltering.pop();
归功于@DrewT