Объединить критерии поиска из разных столбцов

#datatables

#таблицы данных

Вопрос:

У меня есть таблица данных с 3 столбцами и одним полем поиска.

Любое ключевое слово в окне поиска должно совпадать с началом любого столбца 1, 2 или 3.


Пример:

Учитывая ключевое слово «apple», эти 3 строки будут соответствовать:

«Яблочный пирог» — «десерт» — «ручная работа»

«Новый грушевый десерт» — «десерт» — «яблоня«

«Новый яблочный десерт» — «яблочный десерт» — «ручной работы»

Эта строка не должна совпадать:

«Старый яблочный десерт» — «десерт» — «яблочный продукт ручной работы»


Код:

Для точного совпадения в начале любого из 3 столбцов:

 searchBox.on('keyup', $.proxy(function (e) {
    // how to merge the search result?
    this._table.column(0).search('^'   searchBox.val(), true,
 false).draw();
    this._table.column(1).search('^'   searchBox.val(), true,
 false).draw();
    this._table.column(2).search('^'   searchBox.val(), true,
 false).draw();
}, this));
  

Ответ №1:

Я нашел решение.

В соответствии с таблицей данных нам нужен пользовательский фильтр для достижения условия ИЛИ в нескольких столбцах: https://datatables.net/forums/discussion/11728/filtering-datatable-columns-using-or-logic

 $.fn.dataTable.ext.search.push(function (settings, data, dataIndex) {
      var keyword = searchBox.val();
      keyword = keyword.toUpperCase();
      var productDesc = data[1].toUpperCase();
      var productExch = data[3].toUpperCase();
      var productSymbol = data[5].toUpperCase();
      if (productDesc.startsWith(keyword) || productExch.startsWith(keyword) || productSymbol.startsWith(keyword)) {
        return true;
      }
      return false;
    });

    searchBox.on('keyup', $.proxy(function (e) {
      this._table.draw();  //       this._table.search(searchBox.val()).draw();
    }, this));