DataTables
DataTables - Row grouping with expand/collapse and rowcount
by Karmik Patel
HTML
<link rel="stylesheet" href="//nightly.datatables.net/css/jquery.dataTables.css">
<script src="//nightly.datatables.net/js/jquery.dataTables.js"></script>
<link rel="stylesheet" href="//cdn.datatables.net/rowgroup/1.0.2/css/rowGroup.dataTables.min.css">
<script src="//cdn.datatables.net/rowgroup/1.0.2/js/dataTables.rowGroup.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.2.2/js/buttons.html5.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.32/pdfmake.min.js"></script>
<link rel="stylesheet" href="//cdn.datatables.net/buttons/1.5.1/css/buttons.dataTables.css">
<script src="//cdn.datatables.net/buttons/1.5.1/js/dataTables.buttons.js"></script>
<script src="//cdn.datatables.net/buttons/1.5.1/js/buttons.colVis.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script src="//cdn.datatables.net/buttons/1.5.1/js/buttons.colVis.min.js"></script>
DataTables - Row grouping with expand/collapse and rowcount<br/>
<div class="container">
<table id="example" class="display" style="width:100%">
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Age</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</thead>
<tbody>
<tr>
<td >T. Nixon</td>
<td>System Architect</td>
<td><div style='display:none;'>Edinburgh</div></td>
<td>61</td>
<td > </td>
<td >$320,800/y</td>
</tr>
<tr>
<td data-search="Cedric Kelly">C. Kelly</td>
<td>Senior Javascript Developer</td>
<td><div style='display:none;'>Edinburgh</div></td>
<td>22</td>
<td data-order="1332979200">Thu 29th Mar 12</td>
<td data-order="433060">$433,060/y</td>
</tr>
<tr>
<td data-search="Airi Satou">A. Satou</td>
<td>Accountant</td>
<td><div style='display:none;'>Tokyo</div></td>
<td>33</td>
<td...
CSS
body {
font: 90%/1.45em "Helvetica Neue", HelveticaNeue, Verdana, Arial, Helvetica, sans-serif;
margin: 0;
padding: 0;
color: #333;
background-color: #fff;
}
JavaScript
$(document).ready(function() {
var collapsedGroups = {};
var table = $('#example').DataTable({
paging: false,
order: [
[2, 'asc']
],
rowGroup: {
// Uses the 'row group' plugin
dataSrc: 2,
startRender: function(rows, group) {
var collapsed = !!collapsedGroups[group];
var disp = group;
disp = disp.split(';">').pop().split('</')[0];
console.log(disp);
rows.nodes().each(function (r) {
r.style.display = 'none';
if (collapsed) {
r.style.display = '';
}});
// Add category name to the <tr>. NOTE: Hardcoded colspan
return $('<tr/>')
.append('<td colspan="8">' + disp + ' (' + rows.count() + ')</td>')
.attr('data-name', group)
.toggleClass('collapsed', collapsed);
}
}
});
$('#example tbody').on('click', 'tr.group-start', function() {
var name = $(this).data('name');
collapsedGroups[name] = !collapsedGroups[name];
table.draw(false);
});
});