fn过滤器值'Active'不起作用



我在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:这指定文本应该区分大小写匹配