我有一个包含3列的数据表和一个搜索框。
搜索框中的任何关键字都应与第1,2或3列的开头匹配。
示例:
鉴于关键字" apple",这三行将匹配:
" Apple 馅饼" - "甜点" - "手工制作"
"新梨甜点" - "甜点" - " apple 树"
"新的苹果甜点" - " 苹果甜点" - "手工制作"
此行不匹配:
"老苹果甜点" - "甜点" - "手工制作的苹果产品"
代码:
对于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));
答案 0 :(得分:0)
我找到了解决方案。
根据Datatable,我们需要一个自定义过滤器来实现多列的OR条件: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));