我正在尝试设计一个Datatables表来满足一组特定的标准。
不幸的是,似乎这些是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.
答案 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
。