JSFiddle - React, Tailwind, and code Playground
HTML
<head>
<meta charset="UTF-8">
<title>Deliverables</title>
<link rel ="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.css"/>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.js"></script>
<script src="https://momentjs.com/downloads/moment.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.6.2/js/dataTables.buttons.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.6.2/js/buttons.flash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/pdfmake.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js"></script>
<script src="https://cdn.datatables.net/buttons/1.6.2/js/buttons.html5.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.6.2/js/buttons.print.min.js"></script>
<script src="https://cdn.datatables.net/rowgroup/1.1.2/js/dataTables.rowGroup.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.6.3/js/buttons.bootstrap4.min.js"></script>
<script src="https://cdn.datatables.net/1.10.21/js/dataTables.bootstrap4.min.js"></script>
<link rel ="stylesheet" href="https://cdn.datatables.net/rowgroup/1.1.2/css/rowGroup.bootstrap4.min.css"/>
<link rel ="stylsheet" href="https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap4.min.css"/>
<link rel ="stylesheet" href="https://cdn.datatables.net/buttons/1.6.3/css/buttons.bootstrap4.min.css"/>
<!--<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.15/css/jquery.dataTables.min.css" />-->
<style>
td.details-control {
background: url('details_open.png') no-repeat center center;
cursor: pointer;
}
tr.shown td.details-control {
background: url('details_close.png') no-repeat center center;
}
...
CSS
body {
font: 90%/1.45em "Helvetica Neue", HelveticaNeue, Verdana, Arial, Helvetica, sans-serif;
margin: 0;
padding: 0;
color: #333;
background-color: #fff;
}
td.details-control {
background-color: green;
}
tr.shown td.details-control {
background-color: red;
}
JavaScript
//getTableData();
var dataSet = [
{
Deliverable: 'Deliverable data',
Program: 'Program data',
To: 'To data',
Date: 'Date data',
Approved: 'Approved data',
Notes: 'Notes data'
}
];
initializeTable(dataSet);
function initializeTable(dataSet) {
$(document).ready(function() {
var table = $('#example').DataTable( {
data: dataSet,
columns: [
{
className: 'details-control',
orderable: false,
data: null,
defaultContent: ''
},
{ title: 'Deliverable',
data: 'Deliverable' }
],
//dom: 'Bfrtip',
dom: "<'row'<'col-sm-12 col-md-6'f><'col-sm-12 col-md-6'B>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
buttons: [
'copy','csv','excel','pdf','print'
]
} );
// event listener for opening and closing child rows:
$('#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');
}
} );
} );
}
async function getTableData() {
let dataSet = [];
var urls = [ 'url1','url2','url3' ];
for (var i = 0; i < urls.length; i++) {
try {
let response = await fetchUrl(urls[i]);
// combine each response into one variable:
if (Array.isArray(response)) {
dataSet = [...dataSet, ...response];
} else { // assume it's an object {...}
dataSet.push(response);
}
} catch(err) {
console.log(err);
}
}
//console.log(dataSet);
initializeTable(dataSet);
}
function fetchUrl(url) {
return $.ajax( {
url: url,
type: 'GET'
} );
};
function format ( d ) {
// `d` is the original data object...