嗨,我正在使用数据表,我想用一个确切的单词过滤我的数据。
我的表格数据如下所示;
+-----+----------+
| num | status |
+-----+----------+
| 1 | Active |
+-----+----------+
| 2 | Inactive |
+-----+----------+
| 3 | Active |
+-----+----------+
每当我搜索Active
我也会看到所有Inactive
。有没有办法过滤它,以便状态列只显示确切的单词。
我的JS在下面;
$(document).ready(function() {
var table = $('#items').DataTable( {
select: true,
responsive: true
} );
} );
我一直在阅读 API,但我无法理解它。也许我需要写一些正则表达式?
这里有一个例子(我认为),但是我需要根据自己的需要对其进行修改。
任何帮助或建议将不胜感激。
如果认为使用此任务的自定义过滤器会更好。 unbind
默认处理程序,并改为每次执行完全匹配筛选器。如果您有表格
var table = $('#example').DataTable()
然后以这种方式使用完全匹配的自定义筛选器
$('.dataTables_filter input').unbind().bind('keyup', function() {
var searchTerm = this.value.toLowerCase()
if (!searchTerm) {
table.draw()
return
}
$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
for (var i=0;i<data.length;i++) {
if (data[i].toLowerCase() == searchTerm) return true
}
return false
})
table.draw();
$.fn.dataTable.ext.search.pop()
})
这是一个演示 ->http://jsfiddle.net/hmjnqjbs/1/ 尝试搜索tokyo
。
还行。我意识到问题不是关于完全匹配过滤器中的"确切单词",而是整个单词搜索。当我们搜索时,我们希望看到Vaio Q900
vaio
,但我们不想看到VaioQ900
,因为这里的Vaio
不是整个词。这个问题可以通过使用正则表达式字边界b
简单地解决:
$('.dataTables_filter input').unbind().bind('keyup', function() {
var searchTerm = this.value.toLowerCase(),
regex = '\b' + searchTerm + '\b';
table.rows().search(regex, true, false).draw();
})
下面评论中的OP小提琴更新了->http://jsfiddle.net/hmjnqjbs/3/
现在active
、vaio
等按预期工作。
要过滤完全匹配的搜索结果,可以这样完成 -
table.column(index).search("^" + searchText + "$", true, false).draw();
更多信息 - https://stackoverflow.com/a/19114759/698127
希望这能有所帮助。在两端添加'\b'
将使表格仅搜索整个单词。
var regex = '\b' + searchKey + '\b';
<yourDataTable>.columns(<columnIndex>).search( regex, true, false).draw();