我正在使用Datatables在我的JSP页面中显示表数据。我在我的数据表中启用了搜索功能。
这是我的fiddle
我想允许用户使用"," (逗号分隔值)在搜索框中,并希望处理逗号或OR。我试图实现它但是只要我进入","事情不起作用。我应该做些什么改变才能实现所需的功能
$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
var search = $('.dataTables_filter input').val().toLowerCase();
var inputArray=search.split(",");
var node = table.cell({ column: 0, row: dataIndex }).nodes().to$();
var text = node.find('b').text();
text += node.find('[name$=locationId] option:selected').text()
text += node.find('[name$=empRole] option:selected').text();
for(var i=0;i<inputArray.length;i++){
return text.toLowerCase().indexOf(inputArray[i])>-1;
}
return false;
})
答案 0 :(得分:1)
如果所有行都被过滤掉(可能还有其他原因),DataTable似乎停止在内部调用search()
。我可以通过转动off()
所有绑定并以编程方式触发过滤器来实现该功能;如果您有自定义过滤器,则可以draw()
调用它:
initComplete: function() {
$('.dataTables_filter input').off().on('keyup', function(e) {
table.draw()
})
}
这也可以在用户点击 时过滤:
if (e.which == 13) table.draw()
然后只返回true 如果匹配,并且健全性检查也是一个好主意:obama,
将在数组中提供两个索引,并且所有内容都匹配一个空字符串:
$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
var search = $('.dataTables_filter input').val().toLowerCase().split(',');
var node = table.cell({ column: 0, row: dataIndex }).nodes().to$();
var text = node.find('b').text();
text += node.find('[name$=locationId] option:selected').text()
text += node.find('[name$=empRole] option:selected').text();
text = text.toLowerCase();
for (var i=0, l=search.length; i<l; i++) {
if (search[i].trim() != '' && text.indexOf(search[i]) >-1) return true
}
return false;
})
不确定这是否是最明亮的解决方案;或者如果它在您的现实生活场景中按预期工作,但至少它返回obama,
,obama, trump
,trump, obama
,obama, test
等正确的行。
更新小提琴 - &gt;的 https://jsfiddle.net/1rde0nbm/16/ 强>