首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以让“数据表”搜索框搜索一列,但为其他列使用下拉列表?

是否可以让“数据表”搜索框搜索一列,但为其他列使用下拉列表?
EN

Stack Overflow用户
提问于 2014-09-04 03:03:09
回答 1查看 2.7K关注 0票数 0

我正在设计一个数据表表,以满足一组特定的标准。

  1. 将出现列下拉列表,因此如果选择一个选项,它将只显示与该值完全匹配的列。
  2. 将有一个搜索框,输入该框将只在第一列上筛选。

不幸的是,这似乎是DataTables中两个相互矛盾的需求。

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

代码语言:javascript
复制
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()时,这段代码:

代码语言:javascript
复制
$("#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选项做了一个simialr的事情,但这不再是在当前的版本。现在我已经没有主意了。

因此,是否有一种方法可以限制数据表,使搜索框只在一个列上筛选,同时允许对其他列进行基于下拉的筛选?

PS:对于好奇的人来说,这里的jsFiddle非常清楚地显示了这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-04 05:37:56

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

首先,保留对将要搜索的每一列的搜索(因此不包括列上的任何searching选项。

然后,通过删除选项标志,使用f旋转筛选框。

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

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

这将搜索仅应用于第0列。不过,这行

代码语言:javascript
复制
.column( 0 )

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

代码语言:javascript
复制
.columns(0,1,2)

也可以用于匹配搜索字符串位于所有给定列中的行,如下所示:

代码语言:javascript
复制
.column([0,1,2])

这里有很多演示这个的小摆设,所以你可以看到

  • 只匹配第一列
  • 前3栏
  • 前三栏

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25656655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档