#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));