是否可以让数据表搜索框搜索一列,但是对其他列使用下拉菜单?

时间:2014-09-04 03:03:10

标签: jquery datatables

我正在尝试设计一个Datatables表来满足一组特定的标准。

  1. 会有列下拉列表,因此如果选择了某个选项,它将仅显示与该值完全匹配的列。
  2. 会有一个搜索框,输入此内容只会在第一列上过滤
  3. 不幸的是,似乎这些是DataTables中两个相互矛盾的要求。

    此代码允许将搜索栏限制为第一列

    numCols = $("#myTable thead tr:first th").length
    columns = [{ "searchable": true }]
    for (var i=1; i < numCols; i++) {
        columns.push({ "searchable": false });
    }
    
    var table = $('#myTable').DataTable({
        "paging": false,
        "columns":columns
    });
    

    但是,当使用column.search()这段代码时:

    $("#myTable thead tr:first th").each( function ( i ) {
        if ($(this).hasClass("filter")) {
            var select = $('<select name="select_column_'+i+'"><option value="">ALL</option></select>')
            .appendTo( $(this).empty() )
            .on( 'change', function () {
                table.column(i)
                .search( $(this).val(),false,false,false)
                .draw();
            } );
    
            table.column( i ).data().unique().sort().each( function ( d, j ) {
                select.append( '<option value="'+d.replace(/[[\]\/()]/g,'\\$&')+'">'+d+'</option>' )
            });
        }
    });
    

    现在,我知道我已经在表的searchable声明中将columns设置为false,并且删除此项允许下拉列表再次起作用 - 但这意味着搜索文本框中的过滤器所有列上的表格,而不仅仅是第一个。

    遗留文档说有一个bFilterable选项做了类似的事情,但现在不再是当前版本了。现在我完全没有想法了。

    那么,有没有办法限制数据表格,使搜索框只过滤一列,同时允许基于下拉列表的过滤?

    PS:For the curious, here is jsFiddle that shows the problem pretty clearly.

1 个答案:

答案 0 :(得分:2)

事实证明,使用标准的Datatables API是不可能的,但是使用jQuery可以扩展表来管理它。

首先,请继续搜索每个要搜索的列(因此请排除列上的所有searching选项。

然后删除f标记,使用DataTables.dom option关闭过滤框。

然后在表格本身之前创建一个自定义搜索框:

$('<input type="text" />')
    .insertBefore('#myTable')
    .before('<label>My special search: </label>')
    .on( 'keyup change', function () {
        table
        .column( 0 )
        .search( this.value )
        .draw();
    });

这仅适用于第0列的搜索。但行

.column( 0 )

可以更改为匹配行是任意列中的字符串,如下所示:

.columns(0,1,2)

或者可以匹配给定列的 all 中搜索字符串的行,如下所示:

.column([0,1,2])

有许多小提琴可以演示这个,所以你可以看到

查看功能差异的最佳示例字符串是an