我想在DataTable的一列中搜索确切的值,并仅返回包含该值的行。我已经读过这样做的方法是对特定值进行正则表达式搜索,但是当我尝试这个时,精确的正则表达式搜索不返回任何内容。
例如,在下表中,我想只返回包含id = 0
的行<table id="searchTable" class="formTable display dataTable" cellspacing="0" style="width: 100%;">
<thead>
<tr>
<th>id</th>
<th>Position</th>
<th>Office</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>Accountant</td>
<td>Tokyo</td>
</tr>
<tr>
<td>1</td>
<td>Chief Executive Officer (CEO)</td>
<td>London</td>
</tr>
<tr>
<td>2</td>
<td>Junior Technical Author</td>
<td>San Francisco</td>
</tr>
<tr>
<td>10</td>
<td>Software Engineer</td>
<td>London</td>
</tr>
<tr>
<td>20</td>
<td>Software Engineer</td>
<td>San Francisco</td>
</tr>
</tbody>
</table>
加载文档后,我尝试使用搜索API as described here。
var table = null;
$(document).ready(function(){
table = $('#searchTable').DataTable( {
"sPaginationType": "full_numbers",
"iDisplayLength": 5
} );
table.columns(0).search('/0/',true,false).draw();
} );
答案 0 :(得分:3)
诀窍是在搜索的值之前放置起始字符符号'^',在值之后放置字符符号'$'。如果不给这两个符号,正则表达式将始终不返回任何内容。
固定部分:
var table = null;
$(document).ready(function(){
table = $('#searchTable').DataTable( {
"sPaginationType": "full_numbers",
"iDisplayLength": 5
} );
table.columns(0).search('^0$',true,false).draw();
} );
答案 1 :(得分:1)
以防其他人遇到此问题。在我的情况下,问题与在正则表达式中搜索具有特殊含义的字符串字符有关(例如,即使表中存在数据,“ AC (JLHA2) - GB/T1179-2008
”也不会给出任何结果)。
我能够使用$.fn.dataTable.util.escapeRegex()
来转义所有特殊字符来解决此问题。
这里是解决方法:
var table = null;
$(document).ready(function(){
table = $('#searchTable').DataTable( {
"sPaginationType": "full_numbers",
"iDisplayLength": 5
} );
// Escape the expression so we can perform a regex match
var val = $.fn.dataTable.util.escapeRegex('AC (JLHA2) - GB/T1179-2008');
table.columns(0).search(val ? '^' + val + '$' ; '', true, false).draw();
} );