我在以编程方式在 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()
不会只搜索整个单词,而是进行不区分大小写的搜索。您可以通过更改文本“Inactive”来验证这一点:
$('#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" />
你至少有两个选择来解决这个问题:
我遇到了同样的问题。这就是我解决问题的方法:
$('#mytable').dataTable().fnFilter("^Active$", 7, true);
"^Active$"
是匹配任何以单词“Active”开头并以单词“Active”结尾的文本的正则表达式。
"Active"
是一个只匹配文本“Active”的字符串。
7:这是文本所在列的列索引 匹配。
true:这指定文本应区分大小写