2016-10-07 2 views
0

Мне нужно установить свойство searchable динамического столбца (после таблицы init). Есть ли решение? В случае использования я использую расширение кнопки для переключения видимости столбцов. Но я не буду искать только видимые столбцы.DataTables - динамически настраивать столбцы для поиска

+0

вы можете сослаться на ссылку https://datatables.net/reference/option/columns.searchable –

ответ

0

Я хотел добавить «кнопки фильтра» к столу. Они должны искать (фильтровать) только в одном исключенном & скрытых & не подлежащих поиску столбцов.

  • исключены & скрыты, поскольку пользователь не должен быть в состоянии видеть это
  • не найден, потому что хотел, чтобы исключить его из глобального поиска.

В нескольких форумах поддержки 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, чтобы обходной путь работал (также для того, чтобы кнопки фильтров и глобальный поиск работали вместе). Я очень надеюсь, что эта функциональность скоро станет интегрированной в ядро!