【发布时间】:2023-03-26 06:25:01
【问题描述】:
我有一个同时使用子行和列搜索(过滤)的数据表。
取自几个数据表示例:Example of Child Rows - Example of Column Searching
搜索列时,我希望结果包含子行内的信息。
例如,在列搜索示例中,此人可能有多个办公室(东京、伦敦和纽约),而您只能通过展开孩子看到这些办公室。当输入任何办公室时,我希望主行显示此人,而不仅仅是显示在行上的那个人。
有没有办法在数据中搜索一行,而不仅仅是显示的文本?
在我的示例中重复:如果您搜索用户 Tiger Nixon,并展开他们,他们有一个名为 All Offices 的部分。我希望在您搜索“纽约”(或任何这些办公室)时显示此用户,而不仅仅是爱丁堡的主要办公室。
相关JavaScript代码:
var table = $('#example').DataTable({
data: mdata,
"columns": [{
"className": 'details-control',
"orderable": false,
"data": null,
"defaultContent": ''
}, {
"data": "name"
}, {
"data": "position"
}, {
"data": "office"
}, {
"data": "salary"
}],
"order": [
[1, 'asc']
]
});
$('#example tfoot th').each( function () {
var title = $('#example thead th').eq( $(this).index() ).text();
$(this).html( '<input type="text" placeholder="Search '+title+'" />' );
} );
// Add event listener for opening and closing details
$('#example tbody').on('click', 'td.details-control', function () {
var tr = $(this).closest('tr');
var row = table.row(tr);
if (row.child.isShown()) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
} else {
// Open this row
row.child(format(row.data())).show();
tr.addClass('shown');
}
});
// Apply the search
table.columns().every( function () {
var that = this;
$( 'input', this.footer() ).on( 'keyup change', function () {
that
.search( this.value )
.draw();
} );
} )
请注意,我的数据是通过实时 Ajax 调用加载的,我可以完全控制返回的数据。
在Datatables论坛上发帖here
【问题讨论】:
-
您不需要在小提琴中使用实时 AJAX 来演示您正在尝试做什么。当然,除非您希望 AJAX 提供的子行内容和列搜索在服务器端完成全表搜索 - 那么我说 祝你好运 :)
-
@davidkonrad 好点。我将数据添加为一个 JavaScript 数组并将小提琴放在 OP 中。
标签: jquery datatables jquery-datatables