2

我正在使用数据表 1.9.4 和列过滤插件。它就像一个魅力,除了当我使用“选择”标签进行列过滤时,过滤器不会完全匹配。它使用通配符搜索,这是我不想要的。我认为使用选择元素而不是文本输入可以解决问题,但事实并非如此。

当我搜索'Semester - I'时,它应该只显示 'Semester - I' 结果。但它也显示“学期 - II”“学期 - III”匹配,因为过滤器不寻找精确匹配。

我尝试了 jQuery DataTable ColumnFilter 插件。“选择”过滤器样式可以支持精确匹配吗?那还有http://code.google.com/p/jquery-datatables-column-filter/issues/detail?id=11那。但是没有一个能解决我的问题。

JS代码

$('#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);
4

3 回答 3

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);
于 2012-09-24T09:12:15.123 回答
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;
于 2012-09-24T08:54:03.603 回答
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); 
    }
于 2013-12-13T19:35:43.440 回答