The filtering plug-in options that DataTables provides are remarkably powerful, letting you set almost any filtering criterion you wish for user based input. A couple of things to note for filtering, firstly you will likely need to customise the filtering presented on this page to match your specific needs. Secondly, if you are using server-side processing, DataTables doesn't do any client-side filtering, so these plug-ins will not have any effect (with server-side processing, all data manipulation is done by the server - so you would need to implement these filters there).
DataTables supports two different kinds of plug-in filtering methods:
To make use of the column (type) based filtering plug-in functions below, you need to include it in the Javascript available for your page, after you load the DataTables library, but before you initialise the DataTable. You must also set the column type for the column(s) that you wish to apply the filter to using sType.
<script type="text/javascript" src="jquery.dataTables.js"></script> <script type="text/javascript" src="dataTables.htmlColumnFilter.js"></script> <script type="text/javascript"> $(document).ready(function() { var oTable = $('#example').dataTable({ "aoColumns": [ "sType": "html", null ] }); } ); </script>
To add the functionality provided by the filtering functions below, you simply need to include it in the Javascript available for your page, after you load the DataTables library, but before you initialise the DataTable. These filters are global and will be applied whenever DataTables applies it's own filtering (for details please see the filters development page).
In the following example the range filtering (numbers) plug-in is saved to a file, and used in the DataTable which is initialised. Note also that event listeners are applied to the two inputs, which will cause the table to redraw, and thus filter the new data (live example):
<script type="text/javascript" src="jquery.dataTables.js"></script> <script type="text/javascript" src="dataTables.rangeFilter.js"></script> <script type="text/javascript"> $(document).ready(function() { var oTable = $('#example').dataTable(); /* Add event listeners to the two range filtering inputs */ $('#min').keyup( function() { oTable.fnDraw(); } ); $('#max').keyup( function() { oTable.fnDraw(); } ); } ); </script>
Range filtering (numbers)
Show details |
Filter a specific numeric column on the value being between two given numbers. Note that you will likely need to change the id's on the inputs and the column in which the numeric value is given. |
Author: | Allan Jardine |
Code: |
$.fn.dataTableExt.afnFiltering.push( function( oSettings, aData, iDataIndex ) { var iColumn = 3; var iMin = document.getElementById('min').value * 1; var iMax = document.getElementById('max').value * 1; var iVersion = aData[iColumn] == "-" ? 0 : aData[iColumn]*1; if ( iMin == "" && iMax == "" ) { return true; } else if ( iMin == "" && iVersion < iMax ) { return true; } else if ( iMin < iVersion && "" == iMax ) { return true; } else if ( iMin < iVersion && iVersion < iMax ) { return true; } return false; } ); /* Example initialisation */ $(document).ready(function() { /* Initialise datatables */ var oTable = $('#example').dataTable(); /* Add event listeners to the two range filtering inputs */ $('#min').keyup( function() { oTable.fnDraw(); } ); $('#max').keyup( function() { oTable.fnDraw(); } ); } ); |
Note that all contributed code is copyright to the original author, unless otherwise stated.