jQuery DataTables fnFilter:在连接字符串中查找字符串的完全匹配

时间:2014-01-29 21:32:05

标签: jquery regex datatables

我正在使用数据表,并且我试图根据隐藏列中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)。我只是不确定如何写它。

2 个答案:

答案 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 );