JSFiddle - React, Tailwind, and code Playground
by Bagrat Zakaryan
HTML
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css">
<script src="https://datatables.net/examples/resources/details_open.png"></script>
<script src="https://datatables.net/examples/resources/details_close.png"></script>
<script src="https://cdn.datatables.net/fixedcolumns/3.2.3/js/dataTables.fixedColumns.min.js"></script>
<table id="example" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th></th>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Salary</th>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Salary</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td>Name</td>
<td>Position</td>
<td>Office</td>
<td>Salary</td>
<td>Name</td>
<td>Position</td>
<td>Office</td>
<td>Salary</td>
</tr>
<tr>
<td></td>
<td>Name</td>
<td>Position</td>
<td>Office</td>
<td>Salary</td>
<td>Name</td>
<td>Position</td>
<td>Office</td>
<td>Salary</td>
</tr>
<tr>
<td></td>
<td>Name</td>
<td>Position</td>
<td>Office</td>
<td>Salary</td>
<td>Name</td>
<td>Position</td>
<td>Office</td>
<td>Salary</td>
</tr>
<tr>
<td></td>
<td>Name</td>
...
CSS
td.details-control {
background: url('https://datatables.net/examples/resources/details_open.png') no-repeat center center;
cursor: pointer;
}
tr.shown td.details-control {
background: url('https://datatables.net/examples/resources/details_close.png') no-repeat center center;
}
th, td { white-space: nowrap; }
div.dataTables_wrapper {
width: 500px;
margin: 0 auto;
}
JavaScript
/* Formatting function for row details - modify as you need */
function format ( d ) {
// `d` is the original data object for the row
return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
'<tr>'+
'<td>Full name:</td>'+
'<td>'+d.name+'</td>'+
'</tr>'+
'<tr>'+
'<td>Extension number:</td>'+
'<td>'+d.extn+'</td>'+
'</tr>'+
'<tr>'+
'<td>Extra info:</td>'+
'<td>And any further details here (images etc)...</td>'+
'</tr>'+
'</table>';
}
$(document).ready(function() {
var table = $('#example').DataTable( {
"autoWidth": true,
"scrollX": true,
"scrollY": "500px",
"language": {
"lengthMenu": " ",
},
"scrollCollapse": true,
"fixedColumns": {
"leftColumns": 0,
"rightColumns": 1
},
"columns": [
{
"className": 'details-control',
"orderable": false,
"data": null,
"defaultContent": ''
},
{ "data": "name" },
{ "data": "position" },
{ "data": "office" },
{ "data": "salary" },
{ "data": "name" },
{ "data": "position" },
{ "data": "office" },
{ "data": "salary" }
],
"order": [[1, 'asc']]
} );
// Add event listener for opening and closing details
$('#example tbody').on('click', 'td.details-control', function () {
var tr = $(this).closest('tr');
var row = table.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child( format(row.data()) ).show();
tr.addClass('shown');
...