Hallo,
var table = document.createElement('table');
var th1 = document.createElement('th');
table.appendChild(th1)
Das ist schon einmal Unsinn. An einem table-Element kann kein th-Element hängen.
var tr = document.createElement('tr');
table.appendChild(tr);
var td1 = document.createElement('td');
tr.appendChild(td1);
Schon besser. Aber der IE will zusätzlich noch ein ausdrückliches tbody-Element (welches in HTML immer stillschweigend vorhanden ist). Wenn du so vorgehst, sollte keiner verletzt werden:
1. table-Element erzeugen
2. thead- oder tbody-Element erzeugen und anhängen
3. tr-Element erzeugen und anhängen
4. th- bzw. td-Elemente erzeugen und anhängen
5. Gegebenenfalls Textknoten und weitere Elemente erzeugen und anhängen
Erzeugen und Anhängen müssen natürlich nicht streng aufeinanderfolgen, du kannst natürlich auch von hinten anfangen, es geht nur darum, dass du letztlich einen solchen Knotenbaum hast: table → thead/tbody → tr → th/td → weitere Knoten.
Mathias