Individual Column Text Filtering doesn't work w/ xScroller
Individual Column Text Filtering doesn't work w/ xScroller
The search fields display inside of the table (bottom row) when the table is in the loading phase but disappear when the table completes loading and renders completely.
I am using the example found here: https://datatables.net/examples/api/multi_filter.html
It is my understanding that the individual column searching fields are to be displayed in place of the footer column headers.
If I remove xScroller, the individual column search fields display just fine in place of the footer.
< script > $(document).ready(function () {
$('#example').dataTable({
"dom": 'T<"clear">lfrtip',
"oTableTools": {
"sSwfPath": "http://datatables.net/release-datatables/extensions/TableTools/swf/copy_csv_xls_pdf.swf",
"aButtons": [{
"sExtends": "copy",
"sButtonText": "Copy",
"oSelectorOpts": {
filter: 'applied'
}
}, {
"sExtends": "csv",
"sButtonText": "CSV",
"oSelectorOpts": {
filter: 'applied'
}
}, {
"sExtends": "xls",
"sButtonText": "Excel",
"oSelectorOpts": {
filter: 'applied'
}
}, {
"sExtends": "pdf",
"sButtonText": "PDF",
"oSelectorOpts": {
filter: 'applied'
}
}, {
"sExtends": "print",
"sButtonText": "Print",
"oSelectorOpts": {
filter: 'applied'
}
}]
},
"fnRowCallback": function (nRow, aData, iDisplayIndex) {
$('td', nRow).attr('nowrap', 'nowrap');
return nRow;
},
"iDisplayLength": 25,
"scrollX": true,
"bAutoWidth": false,
"bProcessing": false,
"sAjaxSource": "../reports/hardware_report.txt",
"sAjaxDataProp": "",
"aoColumns": [{
"mData": "Hostname"
}, {
"mData": "Serial number"
}],
});
$('a.toggle-vis').on('click', function (e) {
e.preventDefault();
// Get the column API object
var column = table.column($(this).attr('data-column'));
// Toggle the visibility
column.visible(!column.visible());
});
// Setup - add a text input to each footer cell
$('#example tfoot th').each(function () {
var title = $('#example tfoot th').eq($(this).index()).text();
$(this).html('<input type="text" placeholder="Search ' + title + '" />');
});
// DataTable
var table = $('#example').DataTable();
// Apply the filter
$("#example tfoot input").on('keyup change', function () {
table.column($(this).parent().index() + ':visible')
.search(this.value)
.draw();
});
});
Appreciate the help.
This question has an accepted answers - jump to answer
This discussion has been closed.
Answers
Anyone out there able to help?
That's the problem. Basically what is happening is that DataTables splits the table into three when you enable scrolling - the header, body and footer. That selector is selecting a hidden footer - not the real, visible, table footer!
To address this you can use the
table().footer()method to get the footer. i.e. you might use:where
tableis the DataTables API instance.Allan
Thanks for taking the time Allan.
I have unsuccessfully tried the following:
Any ideas as to how I might alter the statement?
Here is a modification of my input example showing how it might be done: http://live.datatables.net/sodujome/1/edit .
Allan
Spot on Allan!
Thanks for your time.