DataTables - 动态设置可搜索的列

时间:2016-10-07 08:04:09

标签: jquery datatables datatables-1.10

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

1 个答案:

答案 0 :(得分:0)

我想添加"过滤按钮"到桌子。他们应该搜索(过滤)一个被排除在外的& amp;隐藏的&不可搜索的列。

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

在多个支持论坛中dt。作者承诺实现这一功能,但直到今天他还没有。但我确实找到了thread 你如何自己做。

但你必须稍微改变一下。我的版本:

    $.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的内部缓存才能使解决方法正常工作(同样为了使过滤器按钮和全局搜索一起工作)。 我真的希望这个功能尽快融入核心!