AND-筛选器(包括存在所有搜索词的行)。
这个自定义筛选器覆盖了内置的筛选过程。每一行中的每一列都与每个搜索词进行比较。
$.fn.dataTableExt.afnFiltering.push(
function(oSettings, aData, iDataIndex) {
var keywords = $(".dataTables_filter input").val().split(' ');
var matches = 0;
for (var k=0; k<keywords.length; k++) {
var keyword = keywords[k];
for (var col=0; col<aData.length; col++) {
if (aData[col].indexOf(keyword)>-1) {
matches++;
break;
}
}
}
return matches == keywords.length;
}
);
forked fiddle -> http://jsfiddle.net/9d097s4a/
OR-filter(包括至少一个搜索词的行)。 这是另一种方法,主要是为了简化上面这个答案的尝试。 与其玩弄oSearch
和硬编码的搜索术语不如用事件替换默认的过滤事件,该事件对搜索短语进行标记化,然后执行高级的fnFilter()
。作为可选实验,现在仅在用户按下enter时才执行搜索-这样做感觉更自然。
var input = $(".dataTables_filter input");
input.unbind('keyup search input').bind('keypress', function (e) {
if (e.which == 13) {
var keywords = input.val().split(' '), filter ='';
for (var i=0; i<keywords.length; i++) {
filter = (filter!=='') ? filter+'|'+keywords[i] : keywords[i];
}
dataTable.fnFilter(filter, null, true, false, true, true);
}
});
查看演示 -> http://jsfiddle.net/2p8sa9ww/