我在DataTable中以编程方式搜索字符串"Active"时遇到问题。如果我将表更改为"ActiveTest",则fnFilter工作正常,并正确地过滤掉它。但是,它似乎不适用于字符串"Active"。有人知道为什么吗?
此外,是否有任何编程方法可以将表筛选为仅具有特定值的列,而不在"搜索"输入框中显示该值?我宁愿在我的页面上有一个复选框,上面写着"仅显示活动",这样可以过滤掉它,然后仍然允许用户使用搜索框过滤更多。
以下是我现在如何过滤下表
$('#selector').dataTable().fnFilter('Active');
这会导致"搜索"输入框显示"活动",但不会发生任何情况。这可以与表中的其他字符串配合使用,但看起来字符串"Active"是保留的或其他什么,因为它只是不进行筛选。即使我手动在搜索框中键入"活动",它仍然不会过滤。
提供的代码段作为示例
$('#mytable').DataTable();
$('#testbutton').on('click', function(e) {
$('#mytable').dataTable().fnFilter('Active');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.datatables.net/v/dt/dt-1.10.16/datatables.min.js"></script>
<table id="mytable">
<thead>
<tr>
<th>name</th>
<th>status</th>
</tr>
</thead>
<tbody>
<tr>
<td>john doe</td>
<td>Active</td>
</tr>
<tr>
<td>jane doe</td>
<td>Inactive</td>
</tr>
</tbody>
</table>
<input type="button" id="testbutton" value="filter" />
谢谢!
问题是单词"Inactive"包含字符串"active",默认情况下,fnFilter()
不会只搜索整个单词,而是进行不区分大小写的搜索。您可以通过更改文本"非活动"来验证这一点:
$('#mytable').DataTable();
$('#testbutton').on('click', function(e) {
$('#mytable').dataTable().fnFilter('Active');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.datatables.net/v/dt/dt-1.10.16/datatables.min.js"></script>
<table id="mytable">
<thead>
<tr>
<th>name</th>
<th>status</th>
</tr>
</thead>
<tbody>
<tr>
<td>john doe</td>
<td>Active</td>
</tr>
<tr>
<td>jane doe</td>
<td>Foo</td>
</tr>
</tbody>
</table>
<input type="button" id="testbutton" value="filter" />
你至少有两种选择来解决这个问题:
- 如果满足您的需要,您可以启用区分大小写的匹配(第六个参数,布尔值)
- 您可以启用regex(第三个参数,布尔值)并使用单词边界仅匹配整个单词
我也遇到了同样的问题。这就是我解决问题的方法:
$('#mytable').dataTable().fnFilter("^Active$", 7, true);
CCD_ 2是一个正则表达式;"活动";并以单词"结尾;"活动";。
CCD_ 3是仅与文本"1"匹配的字符串;"活动";。
7:这是文本所在列的列索引与匹配。
true:这指定文本应该区分大小写匹配