【问题标题】:DataTables - dynamically set columns searchableDataTables - 动态设置可搜索的列
【发布时间】:2016-10-07 08:04:09
【问题描述】:

我需要动态设置列的searchable 属性(在表初始化之后)。有解决办法吗?用例是,我使用按钮扩展来切换列可见性。但我不希望只搜索可见列。

【问题讨论】:

标签: jquery datatables datatables-1.10


【解决方案1】:

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

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

在多个支持论坛中,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().invalidate();

这是非常昂贵的,但是您必须清除 DataTable 的内部缓存才能使变通方法起作用(也使过滤器按钮和全局搜索一起工作)。 我真的希望这个功能能尽快集成到核心中!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2021-01-06
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多