<!DOCTYPE html>
<html>
  <head>
    <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
    <link href="https://nightly.datatables.net/css/jquery.dataTables.css" rel="stylesheet" type="text/css" />
    <link href="https://cdn.datatables.net/buttons/1.3.1/css/buttons.dataTables.min.css" type="text/css" />
    <script src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script>
    <script src="https://cdn.datatables.net/buttons/1.6.2/js/dataTables.buttons.min.js"></script>
    <meta charset=utf-8 />
    <title>DataTables - JS Bin</title>
  </head>
  <body>
    <div class="container">
<table id="example" class="display" style="width:100%">
        <thead>
            <tr>
                <th></th>
                <th>Name</th>
                <th>Position</th>
                <th>Office</th>
                <th>Salary</th>
            </tr>
        </thead>
        <tfoot>
            <tr>
                <th></th>
                <th>Name</th>
                <th>Position</th>
                <th>Office</th>
                <th>Salary</th>
            </tr>
        </tfoot>
    </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;
}
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;
}
button {color: green}
.disable-button {
  color: #f00 !important;
  cursor: not-allowed;
  pointer-events: none;
  opacity: 0.5;
}
 
function format ( 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>';
}
 
$(document).ready(function() {
    var table = $('#example').DataTable( {
        "ajax": "/ajax/objects.txt",
        "dom": "Blfrtp",
        "buttons": [
          {
            text: 'Close Child Rows',
            className: 'disable-button close-child-rows',
            action: function ( e, dt, node, config ) {
              lastPage = $('#example').DataTable().page();
              var table = $('#example').DataTable();
              table.rows('.shown').every(function () {
                  var row = this;
                  if (row.child.isShown()) {
                    row.child.hide();
                    $(this.node()).removeClass('shown');
                    // disable close child rows button
                    $(".close-child-rows").addClass("disable-button");
                  }
              });
            }
          },
        ],
        "columns": [
            {
                "className":      'details-control',
                "orderable":      false,
                "data":           null,
                "defaultContent": ''
            },
            { "data": "name" },
            { "data": "position" },
            { "data": "office" },
            { "data": "salary" }
        ],
        "order": [[1, 'asc']]
    } );
     
  
      $('#example').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');
          var shownRowsCount = table.rows( '.shown' ).count();
          
          if (shownRowsCount) {
            $(".close-child-rows").removeClass("disable-button");
          } else {
            $(".close-child-rows").addClass("disable-button");
          }
          /*
          // cycle through all rows
          // if ANY row has the class "shown" enable the button
          // if NO row has the class "shown" disable the button
          table.rows().every(function () {
              var rows = this;
              if (rows.child.isShown()) {
                $(".close-child-rows").removeClass("disable-button");
                
              } else {
                $(".close-child-rows").addClass("disable-button");
              }
          });
          */
            
            
          } else {
            // open this row
            row.child( format(row.data()) ).show();
            tr.addClass('shown');
            // enable "close all expanded rows" btn
            $(".close-child-rows").removeClass("disable-button");
          }
      });
  
  
} );
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