<!DOCTYPE html>
<html>
    <head>
    <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
    <link href="https://nightly.datatables.net/css/jquery.dataTables.css" rel="stylesheet" type="text/css" />
    <script src="https://nightly.datatables.net/js/jquery.dataTables.js"></script>
        <meta charset=utf-8 />
        <title>DataTables - JS Bin</title>
    </head>
    <body>
        <div class="container">
          <button>Reload Table</button>
            <table id="example" class="display" width="100%">
                <thead>
                    <tr>
                        <th></th>
                        <th>Name</th>
                        <th>Position</th>
                        <th>Office</th>
                        <th>Age</th>
                    </tr>
                </thead>
            </table>
        </div>
    </body>
</html>
 
body {
    font: 90%/1.45em "Helvetica Neue", HelveticaNeue, Verdana, Arial, Helvetica, sans-serif;
    margin: 0;
    padding: 0;
    color: #333;
    background-color: #fff;
}
div.container {
    min-width: 980px;
    margin: 0 auto;
}
td.details-control {
    background: url('https://www.datatables.net/examples/resources/details_open.png') no-repeat center center;
    cursor: pointer;
}
tr.shown td.details-control {
    background: url('https://www.datatables.net/examples/resources/details_close.png') no-repeat center center;
}
 
function format ( d ) {
    // `d` is the original data object for the row
  //console.log(d);
    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>';
}
// Global var to track shown child rows
var childRows = null;
$(document).ready(function() {
    var table = $('#example').DataTable( {
      ajax: "/ssp/ids-objects.php",
      order: [[1, 'asc']],
      columns: [
            {
                className:      'details-control',
                orderable:      false,
                data:           null,
                defaultContent: ''
            },
            { data: "first_name" },
            { data: "position" },
            { data: "office" },
            { data: "salary" }
        ],
    } );
    // 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
            d = row.data();
            row.child( format(d) ).show();
            tr.addClass('shown');
        }
    } );
  $('button').on('click', function () {
    // Get shown rows
    childRows = table.rows($('.shown')).ids().toArray();
    table.ajax.reload();
  });
  table.on('draw', function () {
    // If reloading table then show previously shown rows
    if (childRows) {
      
      for (var i=0; i< childRows.length; i++) {
        var row = table.row( '#' + childRows[i] );
        d = row.data();
        row.child($(format(d))).show();
        row.nodes().to$().addClass('shown');        
      }
      
      /*
      childRows.every(function ( rowIdx, tableLoop, rowLoop ) {
        d = this.data();
        this.child($(format(d))).show();
        this.nodes().to$().addClass('shown');
      } );
      */
      
      // Reset childRows so loop is not executed each draw
      childRows = null;
    }
    
  });
} );
Output

This bin was created anonymously and its free preview time has expired. Get a free unrestricted account

Dismiss x
public
Bin info
anonymouspro
0viewers