Cascading Dropdown on Filters
Cascading Dropdown on Filters (jquery DataTable)
by Shrikrishna Gupta
HTML
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/modern/tail.select-light-feather.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/js/tail.select.js"></script>
<table id="example" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th class="filterhead">Name</th>
<th class="filterhead">Position</th>
<th class="filterhead">Office</th>
<th class="filterhead">Age</th>
<th class="filterhead">Start date</th>
<th class="filterhead">Salary</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Age</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</tfoot>
<tbody>
<tr>
<td>Tiger Nixon</td>
<td>System Architect</td>
<td>Edinburgh</td>
<td>61</td>
<td>2011/04/25</td>
<td>$320,800</td>
</tr>
<tr>
<td>Garrett Winters</td>
<td>Accountant</td>
<td>Tokyo</td>
<td>63</td>
<td>2011/07/25</td>
<td>$170,750</td>
</tr>
<tr>
<td>Ashton Cox</td>
<td>Junior Technical Author</td>
<td>San Francisco</td>
<td>66</td>
<td>2009/01/12</td>
<td>$86,000</td>
</tr>
<tr>
<td>Cedric Kelly</td>
<td>Senior Javascript Developer</td>
<td>Edinburgh</td>
<td>22</td>
<td>2012/03/29</td>
<td>$433,060</td>
</tr>
<tr>
<td>Airi Satou</td>
<td>Accountant</td>
<td>Tokyo</td>
<td>33</td>
<td>2008/11/28</td>
<td>$162,700</td>
</tr>
<tr>
<td>Brielle Williamson</td>
<td>Integration Specialist</td>
<td>New York</td>
<td>61</td>
...
JavaScript
$(document).ready(function() {
var table = $('#example').DataTable({
initComplete: function() {
this.api().columns().every(function() {
var column = this;
var select = $('<select class ="filter"></select>')
.appendTo($(column.footer()).empty())
.tailselect({ deselect: true, width: 180 });
select.on("change", function(){
var val = $.fn.dataTable.util.escapeRegex(this.value());
column.search(val? ('^' + val + '$'): '', true, false).draw();
});
column.data().unique().sort().each(function(d, j) {
select.options.add(d, d, '#');
});
select.query();
});
}
});
table.on('draw', function() {
table.columns().indexes().each(function(idx) {
var select = $(table.column(idx).footer()).find('select').tailselect();
if (select.value() === null) {
select.reload();
table.column(idx, {
search: 'applied'
}).data().unique().sort().each(function(d, j) {
select.options.add(d, d);
});
select.query();
}
});
});
});