<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", _className: "nosearchbox" },
{ "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);
// let thead = $('<thead>');
// let tr1 = $('<tr>');
// let tr2 = $('<tr>');
// for (let c of columnDef) {
// if ('visible' in c && c.visible === false) {
// continue;
// }
// let th1 = $('<th>');
// if (c._className) {
// th1.addClass(c._className);
// }
// th1.html(c._title || '');
// let th2 = $('<th>');
// if (c._className) {
// th2.addClass(c._className);
// }
// th2.html(c._title || '');
// tr1.append(th1);
// tr2.append(th2);
// }
// thead.append(tr1);
// thead.append(tr2);
// $('#example').append(thead);
// //console.log(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" />' );
} );
var table = $('#example').DataTable({
colReorder: true,
orderCellsTop: true,
rowCallback: function(row, data, displayNum, displayIndex, dataIndex) {
let dataTable = $('#example').DataTable();
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' || column_name == 'salary')) {
dataTable.cell(i).invalidate();
//console.log(column_name);
//console.log(i.innerHTML);
i.innerHTML = "";
i.classList.remove("dt-control");
}
});
}
}
},
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();
});
}
});
} );
You can jump to the latest bin by adding /latest
to your URL
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + [ | Indents selected lines |
ctrl + ] | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Clone Bin |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |