数据表单个列过滤(选择标记):使用完全匹配

时间:2012-09-24 08:26:18

标签: javascript jquery datatables filtering exact-match

我正在使用数据表1.9.4和列过滤插件。它就像一个魅力,除了当我使用'选择'用于列过滤的标记,过滤器不用于完全匹配。它使用通配符搜索,我不想要。我认为使用选择元素而不是文本输入可以解决问题,但它没有。

当我搜索' Semester - I' 时,它应该仅显示' Semester - I'结果。但它显示' Semester - II' ' Semester - III' 匹配,因为过滤器未查找完全匹配。

我尝试jQuery DataTable ColumnFilter plugin. Can the "select" filter style support exact match?那个,http://code.google.com/p/jquery-datatables-column-filter/issues/detail?id=11那个。但没有人解决我的问题。

JS CODE

$('#semester').dataTable({
                    "sPaginationType": "full_numbers"
                })
                .columnFilter({
                    aoColumns: [ { type: "text"},
                             { type: "text" },
                             { type: "select", values: [ 'Year - I', 'Year - II', 'Year - III', 'Semester - I', 'Semester - II', 'Semester - III', 'Semester - IV', 'Semester - V', 'Semester - VI', 'Semester - VII  ( Integrated )', 'Semester - VIII  ( Integrated )', 'Semester - IX  ( Integrated )', 'Semester - X  ( Integrated )']},
                             { type: "text" },
                             null
                        ]

                });

还有其他选择吗?提前致谢

更新

我也尝试了以下内容,但这也没有帮助:

if (bRegex)
      oTable.fnFilter($(this).val(), iColumn, bRegex);
else
      oTable.fnFilter(unescape("^"+$(this).val()+"$"), iColumn, true);

3 个答案:

答案 0 :(得分:4)

瞧!通过一系列试错尝试自己想出来。对于那些遇到类似问题的人来说,解决方案是:

在插件文件的select.change(function () {})内,更改此内容:

if (bRegex)
  oTable.fnFilter($(this).val(), iColumn, bRegex);
else
  oTable.fnFilter(unescape($(this).val()), iColumn);

if (bRegex)
  oTable.fnFilter($(this).val(), iColumn, bRegex);
else
  oTable.fnFilter(unescape("^"+$(this).val()+"$"), iColumn, true, false);

答案 1 :(得分:1)

DataTable Demo

中的多重过滤器
var asInitVals = new Array();

$(document).ready(function() {
    var oTable = $('#example').dataTable( {
        "oLanguage": {
            "sSearch": "Search all columns:"
        }
    } );

    $("tfoot input").keyup( function () {
        /* Filter on the column (the index) of this element */
        oTable.fnFilter( this.value, $("tfoot input").index(this) );
    } );



    /*
     * Support functions to provide a little bit of 'user friendlyness' to the textboxes in 
     * the footer
     */
    $("tfoot input").each( function (i) {
        asInitVals[i] = this.value;
    } );

    $("tfoot input").focus( function () {
        if ( this.className == "search_init" )
        {
            this.className = "";
            this.value = "";
        }
    } );

    $("tfoot input").blur( function (i) {
        if ( this.value == "" )
        {
            this.className = "search_init";
            this.value = asInitVals[$("tfoot input").index(this)];
        }
    } );
} );

注意,在上面的代码中,提供了支持功能,以确保最终用户知道正在过滤哪些数据。 fnFilter()是主要导入的功能。

// after creating the table and getting the table object...

var oTable = $('#some_id').dataTable();

// ...you can use it to get a settings object...

var oSettings = oTable.fnSettings();

// ...then you can do things with the settings object

oSettings.aoPreSearchCols[ iCol ].sSearch = "^\\s*"+'1'+"\\s*$";
oSettings.aoPreSearchCols[ iCol ].bRegex = false;
oSettings.aoPreSearchCols[ iCol ].bSmart= false;

答案 2 :(得分:0)

我使用了接受的答案,但是如果我更改下拉列表,则将其更改回默认值我将得不到任何结果。我的猜测是它试图在“”上进行精确的文本搜索并且什么也没找到。我做了这个修改,似乎对我有用。

if ($(this).val() == "")
    oTable.fnFilter(unescape($(this).val()), iColumn, false, false, false, false);
else {
    if (bRegex)
       oTable.fnFilter($(this).val(), iColumn, bRegex, false, false, false); 
    else
       oTable.fnFilter(unescape("^" + $(this).val() + "$"), iColumn, true, false, false, false); 
    }