JSFiddle - React, Tailwind, and code Playground
by odrelon
HTML
<html>
<head>
<style>
input { margin: 5px; }
table { border-collapse: collapse; margin: 25px 0; }
td { padding: 5px; border: 1px solid #BBB; width: 60px; text-align: center; }
#newData { font-family: "Courier New", tahoma; font-size: 0.8em; border: 1px solid #BBB; }
</style>
</head>
<body onload="javascript:Init();">
<input type="button" id="step1" value="Step 1." onclick="javascript:stepOne(this);" />
Queue some "working items" in the below table.<br />
<input type="button" id="step2" value="Step 2." onclick="javascript:stepTwo(this);" />
Load some HTML data behind the scenes<br />
<input type="button" id="step3" value="Step 3." onclick="javascript:stepThree(this);" />
Append the data "covertly"<br />
<input type="button" id="step3a" value="Step 3a." onclick="javascript:stepThreeA(this); "/>
Now do it the wrong way and watch the workers die.
<table id="dataTable"></table>
<h4>"Sample" HTML Data:</h4>
<div id="newData"></div>
</body>
</html>
JavaScript
/* Populate sample (bogus) data */
function addRow(table,tr){
var tr = document.createElement('tr');
document.getElementById(table).appendChild(tr);
return tr;
}
function addCell(tr,content){
var td = document.createElement('td');
td.innerHTML = content;
tr.appendChild(td);
return td;
}
var newData = '', cellId = 0, newCellId = 1000;
function Init(){
for (var r = 0; r < 5; r++){
newData += '<tr>';
var tr = addRow('dataTable');
for (var c = 0; c < 7; c++){
newData += '<td>New Data</td>';
var td = addCell(tr,'Data');
td.id = cellId++;
}
newData += '</tr>';
}
document.getElementById('newData').appendChild(document.createTextNode(newData));
}
/*
* Step 1
* the "working items"
*/
var workingFields = [];
function stepOne(btn){
var table = document.getElementById('dataTable');
for (var r = 0; r < 10; r++){
var randRow = Math.floor(Math.random() * table.rows.length);
var randCell = Math.floor(Math.random() * table.rows[0].cells.length);
workingFields.push(table.rows[randRow].cells[randCell]);
}
toggleWorking();
btn.disabled = true;
}
function toggleWorking(){
for (var i = 0; i < workingFields.length; i++){
var c = workingFields[i];
c.innerHTML = (c.innerHTML == 'Data' ? 'Working' : 'Data');
}
setTimeout('toggleWorking();',1000);
}
/*
* Step 2
* Make a dummy html table and loa the new data under the radar
*/
function stepTwo(btn){
var table = document.createElement('table');
table.style.display = 'none';
table.id = 'newDataTable';
table.innerHTML = newData;
document.getElementsByTagName('body')[0].appendChild(table);
btn.disabled = true;
}
/*
* Step 3
* Move the rows over covertly from the hidden table to the new table
*/
function stepThree(btn){
var newDataTable = document.getElementById('newDataTable');
var dataTable...