我正在使用数据表,并且我试图根据隐藏列中ID的存在来过滤我的表。隐藏列包含多个ID,它们由“@”符号分隔,例如@ 2311 @ 11 @ 3546 @(注意:分隔符可以是任何东西;我们只选择“@”)。
当我将categoryId作为var(filterValue)传递给DataTables fnFilter时,我获得了部分匹配。例如,如果我的categoryId = 1,它将匹配“1”,“11”和“2311”。
我希望categoryId与列中的任何数字完全匹配,在“@”之间(由分隔符)。我对fnFilter API支持的RegEx非常不熟悉,我认为这是最好的方法。不幸的是,我真的没有太多高效的代码可供分享。
这是我到目前为止的功能:
var oTable = $('#fundTable').dataTable(); //the dataTable object
var filterCol = $("#table th.colCats").index(); //the index of the column to search in
$('.product-filter').click(function() { //click a link to filter the data table
var filterValue = $(this).attr('href').match(/categoryId=([0-9]+)/)[1]; //grab the cat ID from the link
oTable.fnFilter(filterValue, filterCol, true, false); //use fnFilter API to pass in the value, the col index, regex true/false, smart filtering true/false
oTable.fnDraw(); //redraw the table using filter result
return false; //don't activate anchor link
});
这是我正在使用的表的编辑版本:
<table id="fundTable">
<thead>
<tr role="row">
<th>
Fund
</th>
<th>
Categories
</th class="colCats">
</tr>
</thead>
<tbody>
<tr>
<td>
Fund 1
</td>
<td>
@23@2311@
</td>
</tr>
<tr>
<td>
Fund 2
</td>
<td>
@123@4567@1234@
</td>
</tr>
</tbody>
</table>
我相信DataTables API表示您可以使用正则表达式代替值(filterValue)。我只是不确定如何写它。
答案 0 :(得分:1)
这很简单 - 我在我的一些代码中做了一些非常相似的事情(尽管我在ID的任一侧使用'=' - 相应地调整):
oTable.fnFilter('=' + filterValue + '=', filterCol);
oTable.fnDraw();
由于默认过滤在列中的任何位置查找字符串,因此不需要进一步的正则表达式。
答案 1 :(得分:1)
我遇到了类似的问题,但我只需按顺序匹配输入。对我来说这很有效,在值之前添加^
并将第3个参数(正则表达式)添加到true
。
注意:这与具有jQuery的输入结合使用 附加了keyup函数,因此复杂的第二个参数。
oTable.fnFilter("^" + this.value,
oTable.oApi._fnVisibleToColumnIndex(binding.gridId.fnSettings(),
$("thead input").index(this)), true );