<!DOCTYPE html>
<html>
  <head>
    <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.datatables.net/v/bs5/jq-3.7.0/jszip-3.10.1/dt-2.1.7/af-2.7.0/b-3.1.2/b-colvis-3.1.2/b-html5-3.1.2/b-print-3.1.2/cr-2.0.4/date-1.5.4/fc-5.0.2/fh-4.0.1/kt-2.12.1/r-3.0.3/rg-1.5.0/rr-1.5.0/sc-2.4.3/sb-1.8.0/sp-2.3.2/sl-2.1.0/sr-1.4.1/datatables.min.css" rel="stylesheet">
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.datatables.net/v/bs5/jq-3.7.0/jszip-3.10.1/dt-2.1.7/af-2.7.0/b-3.1.2/b-colvis-3.1.2/b-html5-3.1.2/b-print-3.1.2/cr-2.0.4/date-1.5.4/fc-5.0.2/fh-4.0.1/kt-2.12.1/r-3.0.3/rg-1.5.0/rr-1.5.0/sc-2.4.3/sb-1.8.0/sp-2.3.2/sl-2.1.0/sr-1.4.1/datatables.js"></script>
 
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.36/pdfmake.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.36/vfs_fonts.js"></script>
    <meta charset=utf-8 />
    <title>DataTables - JS Bin</title>
  </head>
  <body>
    <div class="container">
      <table id="example" class="table table-striped" width="100%">
      </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;
}
 
$(document).ready(function() {
      let columnDef = [
          {
            data: '__historybutton',
            _className: 'nosearchbox dt-control',
            orderable: false,
            searchable: false,
            defaultContent: '',
          },
          {
            data: '__editbutton',
            _className: 'nosearchbox',
            orderable: false,
            searchable: false,
            render: function (data, type, row, meta) {
              let ret = '<div><a class="editbutton fa fa-pencil-square-o btn btn-primary" href="#"></a></div>';
              return ret;
            },
          },
            { "data": "name", _title: "Name" },
            { "data": "position", _title: "Position" },
            { "data": "office", _title: "Office", visible: false },
            { "data": "salary", _title: "Salary" },
            { "data": "start_date", _title: "Start Date" },
      ];
        
        
      var table = $('#example');
      var thead = $('<thead>').appendTo(table);
      var tr = $('<tr>').appendTo(thead);
        
      $(columnDef).each(function (i) {
        var th = $('<th>',{'html':columnDef[i]._title}).appendTo(tr);
        if ( columnDef[i].hasOwnProperty('_className') ) {
          $(th).addClass( columnDef[i]._className );
        }
      });
      $(tr).clone().appendTo(thead);
      $('#example thead tr:eq(1) th').each( function () {
        let title = $(this).text();
        let classList = $(this).prop('classList');
        if (classList.contains('nosearchbox') || classList.contains('white-bg')) {
          $(this).html('');
          return;
        }
        $(this).html( '<input type="text" placeholder="Search '+title+'" class="column_search" />' );
      } );
  
    let storage_html = {};
    let storage_classes = {};
    
    var table = $('#example').DataTable({
      colReorder: true,
      orderCellsTop: true,
      rowCallback: function(row, data, displayNum, displayIndex, dataIndex) {
        let dataTable = $('#example').DataTable();
        //dataTable.row(row).invalidate('data');
        if (displayNum > 0) {
          let prev_data = dataTable.rows( { page: 'current' } ).data()[displayNum-1].position;
          let cur_data = dataTable.rows( { page: 'current' } ).data()[displayNum].position;
          if (prev_data == cur_data) {
            let items = row.querySelectorAll(':defined');
            items.forEach((i) => {
              let column_name = dataTable.column(i).dataSrc();
              //console.log(dataTable.column(i).className());
              if (column_name && column_name == 'position') {
                //console.log(column_name);
                //console.log(i.innerHTML);
                if (!(dataIndex in storage_html) || !(column_name in storage_html[dataIndex])) {
                  storage_html[dataIndex] ||= {};
                  storage_html[dataIndex][column_name] = i.innerHTML;
                }
                i.innerHTML = "";
                if (i.classList.contains("dt-control")) {
                  if (!(dataIndex in storage_classes) || !(column_name in storage_classes[dataIndex])) {
                    storage_classes[dataIndex] ||= {};
                    storage_classes[dataIndex][column_name] = "dt-control";
                  }
                  i.classList.remove("dt-control");
                }
              }
            });
          } else {
            let items = row.querySelectorAll(':defined');
            items.forEach((i) => {
              let column_name = dataTable.column(i).dataSrc();
              //console.log(dataTable.column(i).className());
              if (column_name && column_name == 'position') {
                //i.innerHTML = data[column_name];
                if (dataIndex in storage_html) {
                  //console.log(storage_html[dataIndex]);
                  i.innerHTML = storage_html[dataIndex][column_name];
                }
                if (dataIndex in storage_classes) {
                  i.classList.add(storage_classes[dataIndex][column_name]);
                }          
              }
            });
          }
        } else {
          let items = row.querySelectorAll(':defined');
          items.forEach((i) => {
            let column_name = dataTable.column(i).dataSrc();
            //console.log(dataTable.column(i).className());
            if (column_name && column_name == 'position') {
              //i.innerHTML = data[column_name];
              if (dataIndex in storage_html) {
                //console.log(storage_html[dataIndex]);
                i.innerHTML = storage_html[dataIndex][column_name];
              }
              if (dataIndex in storage_classes) {
                i.classList.add(storage_classes[dataIndex][column_name]);
              }          
            }
          });
        }
      },
        dom: 'Bfrtip',
        buttons: [
            {
                extend: 'colvis'
            },
        ],
        columns: columnDef,
        
        ajax: "/examples/ajax/data/data_5k.txt",
          
          //select: {
          //  style: 'api',
          //  info: false,
          //},
          //deferLoading: 0,
          //autoWidth: true,
          scrollX: true,
          scrollY: '50vh',
          //scrollCollapse: true,
          //processing: true,
        initComplete: function () {
          $( this.api().table().container()  ).on( 'keyup', "thead input.column_search",function () {
            table
              .column( $(this).closest('th') )
              .search( this.value )
              .draw();
          });
        }
      });
  
  } );
6 errors 21 warnings
Line 2: 'let' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 16: 'let' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 41: 'let' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 42: 'let' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 50: 'let' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 51: 'let' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 53: 'table' is already defined.
Line 57: 'let' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 60: 'let' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 61: 'let' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 64: 'let' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 65: 'arrow function syntax (=>)' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 66: 'let' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 72: Expected an identifier and instead saw '='.
Line 72: Expected an assignment or function call and instead saw an expression.
Line 72: Missing semicolon.
Line 72: Unnecessary semicolon.
Line 80: Expected an identifier and instead saw '='.
Line 80: Expected an assignment or function call and instead saw an expression.
Line 80: Missing semicolon.
Line 80: Unnecessary semicolon.
Line 88: 'let' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 89: 'arrow function syntax (=>)' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 90: 'let' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 105: 'let' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 106: 'arrow function syntax (=>)' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Line 107: 'let' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers