<!DOCTYPE html>
<html>
  <head>
    <script src="https://code.jquery.com/jquery-3.5.0.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>
    <link href="https://nightly.datatables.net/rowreorder/css/rowReorder.dataTables.css?_=9e78fb9f95a9b67ea132905fd3877eea.css" rel="stylesheet" type="text/css" />
    <script src="https://nightly.datatables.net/rowreorder/js/dataTables.rowReorder.js?_=9e78fb9f95a9b67ea132905fd3877eea"></script>
    <script src="https://cdn.datatables.net/plug-ins/1.10.20/sorting/absolute.js"></script>
    <meta charset=utf-8 />
    <title>DataTables - JS Bin</title>
  </head>
  <body>
    <div class="container">
      <table id="roles_table" class="display nowrap" width="100%">
        <thead>
          <tr>
            <th>Rank</th>
            <th>Role</th>
            <th>datas</th>
            <th>datas</th>
        </tr>
        </thead>
        <tfoot>
          <tr>
            <th>Rank</th>
            <th>Role</th>
            <th>datas</th>
            <th>datas</th>
        </tr>
        </tfoot>
        <tbody>
          <tr>
            <td>1</td>
            <td>owner</td>
            <td>some data</td>
            <td>some data</td>
          </tr>
          <tr>
            <td>2</td>
            <td>admin</td>
            <td>some data</td>
            <td>some data</td>
          </tr>
          <tr>
            <td>3</td>
            <td>mod</td>
            <td>some data</td>
            <td>some data</td>
          </tr>
          <tr>
            <td>4</td>
            <td>user</td>
            <td>some data</td>
            <td>some data</td>
          </tr>
        </tbody>
      </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;
}
table.dataTable td.reorder {
  text-align: unset !important;
}
 
$(document).ready( function () {
var swap = false;
var state = [];
var reorderType = $.fn.dataTable.absoluteOrderNumber([
    { value: 1, position: 'top' }
]);
var rolesTable = $('#roles_table').DataTable({
    rowReorder: { selector: '.allow-reorder' },
    columnDefs: [
        { targets: '_all', orderable: false },
        { targets: [2, 3], width: '10%', searchable: false },
        {
            targets: 0,
            type: reorderType,
            className: 'allow-reorder reorder',
            createdCell: function (td, cellData, rowData, row, col) {
                console.log('createdCell');
                if (!swap) {
                    console.log('push state');
                    state.push(rowData.slice()); // push a copy of rowData array
                }
              // use rowData[1] for the Role column
                if (rowData[1] === 'owner') {
                    $(td).removeClass('allow-reorder reorder');
                }
            }
        }
    ]
});
rolesTable.on('row-reordered', function (e, diff, edit) {
    //console.log(diff);
    console.log(state);
    swap = false;
    for (var i = 0; i < diff.length; i++) {
        var d = diff[i];
        if (d.oldData == 1) {
            swap = true;
            break;
        }
    }
    rolesTable.one('draw', function () {
        if (swap) {
            // clear then redraw with the previous state
            rolesTable.clear().draw();
            console.log('swap true');
            for (i = 0; i < state.length; i++) {
                var s = state[i];
                rolesTable.row.add(s).draw().node();
            }
        } else {
            console.log('else');
            // update state
            state = rolesTable.data();
        }
    });
});
  
});
Output 300px

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

Dismiss x
public
Bin info
anonymouspro
0viewers