jQuery DataTables’OR’搜索/过滤
我正在使用jQuery DataTables( http://www.datatables.net/ )来显示一些表格数据。 搜索/filter是一个强大的function。 虽然如果在表格中搜索多个关键字,搜索仅过滤已经过滤的数据。
例如这里的例子 – http://jsfiddle.net/illuminatus/2j0Lz5or/1/
如果像10 99
那样搜索关键字,则不会产生任何结果。 我希望搜索显示包含搜索或输入的所有关键字的所有结果/行。
搜索10 99
将显示第1,5和6行。
从技术上讲,搜索应该是“搜索”。
非常感谢任何帮助。
编辑:搜索应该是’或’搜索。
AND -filter(包括存在所有搜索词的行)。 此自定义筛选器会覆盖内置筛选过程。 将每行中的每列与每个搜索词进行比较。
$.fn.dataTableExt.afnFiltering.push( function(oSettings, aData, iDataIndex) { var keywords = $(".dataTables_filter input").val().split(' '); var matches = 0; for (var k=0; k-1) { matches++; break; } } } return matches == keywords.length; } );
分叉小提琴 – > http://jsfiddle.net/9d097s4a/
OR -filter(包括至少存在一个搜索词的行)。 这是另一种方法,主要是试图简化上述答案 。 而不是使用oSearch
和硬编码搜索术语,默认过滤事件将替换为标记搜索短语的事件,然后执行高级fnFilter()
。 作为可选实验,现在只在用户点击输入时执行搜索 – 感觉更自然。
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
看演示 - > http://jsfiddle.net/2p8sa9ww/
我通过使用regEx搜索得到了这个。 我使用以下regEx在整个表中搜索关键字10 99
^(?=.*?(10|99)).*?
叉小提琴 – http://jsfiddle.net/illuminatus/2j0Lz5or/6/
参考: http : //datatables.net/forums/discussion/12062/filtering-jquery-datatable-using-regular-expression
更新了数据表1.10
//在新位置搜索字段
Table = $('#your_datatable').DataTable(); $('#your_input_text_field').keyup(function () { Table.search($(this).val()).draw(); }) ////OR search (enabling regular expression search) var input = $('#your_input_text_field'); 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]; } //true (param 2) turns regex on, false (param 3) turns smart search off Table.search(filter, true, false).draw(); } });
相同但触发搜索“每个”按键而不是按Enter键:
var dataTable = $('table').dataTable(); var input = $(".dataTables_filter input"); input.unbind('keyup search input').bind('keyup', function(e) { if (input.val().length > 0) { var keywords = input.val().trim().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); // ^ Treat as regular expression or not } else if (input.val().length == 0) { dataTable.fnFilter(" ", null, true, false, true, true); } });
OR SEARCH
A B C D 0 0 0 10 0 5 0 0 0 0 0 0 2 0 0 10 0 0 9 10 0 0 99 0