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');
       ...