通过数据表中的单个列过滤器进行精确短语搜索

时间:2013-08-19 07:26:21

标签: ajax filter datatables word

我在我的php代码中使用数据表来使用selectbox过滤列。在jquery.dataTables.js中,有一段代码:

/* Single column filter */
$.extend( oSettings.aoPreSearchCols[ iColumn ], {
    "sSearch": sInput+"",
    "bRegex": bRegex,
    "bSmart": bSmart,
    "bCaseInsensitive": bCaseInsensitive
} );
_fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 );

就我而言,我的列中包含BMISMTLABM值。现在每当我按BM搜索列时,我都会收到BM条和ABM条记录。但它应该只有BM条记录。 我已将上述代码修改为:

/* Single column filter */
    $.extend( oSettings.aoPreSearchCols[ iColumn ], {
        "sSearch": sInput+"",
        "bRegex": false,
        "bSmart": false,
        "bCaseInsensitive": false
    } );
    _fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 );

但它仍然没有用。所以请帮我怎么做。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

不要更改jquery.dataTables.js,而是在声明和定义数据表的页面中进行更改。改为

$('select', this).change( function () {
            if($(this).val() != ''){
                oTable.fnFilter( "(^|\s)"+$(this).val()+"(\s|$)", i ,true); //filter exact word
            }else{
                oTable.fnFilter( $(this).val(), i); 
            }
        });

答案 1 :(得分:0)

使用您自己的正则表达式,请记住禁用regx和智能过滤

oSettings.aoPreSearchCols[ iColumn ], {
        "sSearch": "^\\s*"+sInput+"\\s*$",
        "bRegex": false,
        "bSmart": false,
        "bCaseInsensitive": false
    }