我正在构建集成了AdminLTE的Laravel应用。 AdminLTE使用DataTables生成表,可以正常工作。但是在AdminLTE中,只能对列进行排序,而不能对列进行过滤。在一个管理员视图中,我要过滤带有此DataTables example中所示的下拉列表的列。 我试图将示例代码集成到AdminLTE main.js中。但是我还没有成功。在main.js中,有一个代码片段,可能应该或可以集成新代码。
$('.datatable').each(function () {
if ($(this).hasClass('dt-select')) {
window.dtDefaultOptions.select = {
style: 'multi',
selector: 'td:first-child'
};
window.dtDefaultOptions.columnDefs.push({
orderable: false,
className: 'select-checkbox',
targets: 0
});
}
$(this).dataTable(window.dtDefaultOptions);
});
有人知道如何使过滤工作吗?
答案 0 :(得分:1)
必须在main.js中添加额外的代码,如下所示。就我而言,我已将过滤器放在第二列的标题(第一列是复选框)中,并在选择下拉列表的第一行中放置了文本,以向用户提供更多信息。
$('.datatable').each(function () {
if ($(this).hasClass('dt-select')) {
window.dtDefaultOptions.select = {
style: 'multi',
selector: 'td:first-child'
};
window.dtDefaultOptions.columnDefs.push({
orderable: false,
className: 'select-checkbox',
targets: 0
});
window.dtDefaultOptions.initComplete = function () {
this.api().columns('1').every( function () {
var column = this;
var select = $('<select><option value="">Filter this column</option></select>')
.appendTo( $(column.header()).empty() )
.on( 'change', function () {
var val = $.fn.dataTable.util.escapeRegex(
$(this).val()
);
column
.search( val ? '^'+val+'$' : '', true, false )
.draw();
} );
column.data().unique().sort().each( function ( d, j ) {
select.append( '<option value="'+d+'">'+d+'</option>' )
} );
} );
}
}
$(this).dataTable(window.dtDefaultOptions);