DataTables – 动态设置可搜索的列

我需要设置动态列的可搜索属性(在表init之后)。 有解决方案吗? 用例是,我正在使用按钮扩展来切换列可见性。 但我不会只搜索可见的列。

我想在表格中添加“过滤按钮”。 他们应该在一个被排除和隐藏且不可搜索的列中搜索(过滤)。

  • 排除和隐藏,因为用户不应该看到它
  • 不可搜索,因为我想将其从全局搜索中排除。

在多个支持论坛中的dt。 作者承诺实现这一function,但直到今天他还没有。 但我确实找到了一个线程 ,你可以自己做。

但你必须改变它。 我的版本:

$.fn.dataTable.Api.register("isColumnSearchable()", function(colSelector) { var idx = this.column(colSelector).index(); return this.settings()[0].aoColumns[idx].bSearchable; }); $.fn.dataTable.Api.register("setColumnSearchable()", function(colSelector, value) { if(value!==this.isColumnSearchable(colSelector)) { var idx = this.column(colSelector).index(); this.settings()[0].aoColumns[idx].bSearchable = value; if(value===true) this.rows().invalidate(); } return value; }); 

我的setFilterFunction:

 function setFilter(table,col,value){ if(value== undefined || value=="" || value==0) { value = ""; table.rows().invalidate(); } else { value = "\\b" + value + "\\b"; } var oldsearchable = table.isColumnSearchable(col); if (!oldsearchable) table.setColumnSearchable(col, true); table.column(col).search(value,true).draw(); if (!oldsearchable) table.setColumnSearchable(col, false); } 

重要的是

。this.rows()无效();

这是非常昂贵的,但您必须清除DataTable的内部缓存,以便解决方法工作(同样为了使filter按钮和全局搜索一起工作)。 我真的希望这个function尽快融入核心!