Таблицы данных jQuery, отделяющие глобальный поиск от поиска по столбцам - PullRequest
0 голосов
/ 13 июня 2019

У меня есть проект, в котором я создаю таблицу данных, и он будет иметь как глобальный поисковый ввод (dom: f), так и фасетоподобные фильтры с использованием коллекции кнопок datatables.net-buttons. По большей части это работает очень хорошо, за исключением того, что я не могу сказать глобальному (search()) игнорировать столбцы, используемые поиском фасетов (columns().search()).

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

Например, скажем, у меня есть набор данных названий фильмов, описаний и оценок, и я настроил фасет на оценки (например, G, PG, PG-13, R, NC-17), и кто-то ожидает поиска фильмов с рейтингом G для детей, и они набирают NC (как в штате Северная Каролина , США), они увидят много неподходящих совпадений, которые они не ожидали. Хотя это надуманный пример, надеюсь, он поможет объяснить проблему.

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

† Отладка процесса в моем браузере привела меня к открытию, что search() запускается дважды: сначала при вызове самого search(), а второй раз при вызове draw() и перерисовывается таблица . .

Если я войду в конфигурацию и установлю searchable: false для своих аспектов, то columns().search() больше не будет работать.

Стоит также отметить, что columns().search() - это поиск на основе AND - это означает, что ВСЕ столбцы должны давать совпадение, где search() - это поиск на основе OR, который будет работать, если ЛЮБЫЕ столбцы совпадают.


У меня вопрос (ы): есть ли способ использовать оба columns().search() и search(), но они должны быть взаимоисключающими друг от друга; или, если мне не хватает конфигурации, которая позволила бы мне достичь поставленных целей.

Мои версии:

  • datatables.net: 1.10.19
  • datatables.net-bs4: 1.10.19
  • datatables.net-buttons-bs4: 1.5.4
  • datatables.net-responseive-bs4: 2.2.3
  • datatables.net-rowreorder-bs4: 1.2.5
  • datatables.net-select-bs4: 1.3.0
...