Таблицы данных — динамически настраиваемые столбцы с возможностью поиска

#jquery #datatables #datatables-1.10

#jquery #таблицы данных #таблицы данных -1.10

Вопрос:

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

Комментарии:

1. вы можете перейти по ссылке datatables.net/reference/option/columns.searchable

Ответ №1:

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

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

На нескольких форумах поддержки dt. автор обещает реализовать эту функциональность, но до этого дня он этого не сделал. Но я нашел тему, как вы можете сделать это самостоятельно.

Но вам придется немного изменить это. Моя версия:

     $.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();

это очень дорого, но вам придется очистить внутренний кэш таблицы данных, чтобы обходной путь сработал (также для того, чтобы кнопки фильтрации и глобальный поиск работали вместе). Я действительно надеюсь, что эта функциональность скоро будет интегрирована в ядро!