Hallo,
nachfolgend die dynamische Erzeugung einer Tabelle per JavaScript für das HTML-DOM des Internet Explorers.
Gruss Tom
Tabelle erzeugen: nur per DOM-Funktionen
var X00=document.createElement('TABLE');
var TabellenZeiger=document.body.appendChild(X00);
Tabellenelemente erzeugen: Es gibt 2 Varianten
Elemente der Tabelle können sein (Tagnamen)
TR Zeile bestehend aus optionalen Spalten (TD)
TD Spalte in einer Zeile (TR)
COLGROUP Gruppierte Spalten (TD)
kann keine TD enthalten, da sonst unwirksam
Besonderheit beim codieren in HTML Beispiel:
<TABLE BORDER="2" RULES="groups">
<COLGROUP SPAN="2" STYLE="color:red"></COLGROUP>
<COLGROUP STYLE="color:blue"></COLGROUP>
<TR>
<TD>Zeile 1 This column is in the first group.</TD>
<TD>Zeile 1 This column is in the first group.</TD>
<TD>Zeile 1 This column is in the second group.</TD>
</TR>
<TR>
<TD>Zeile 2 This column is in the first group.</TD>
<TD>Zeile 2 This column is in the first group.</TD>
<TD>Zeile 2 This column is in the second group.</TD>
</TR>
<TABLE>
erste COLGROUP hat 2 Spalten (TD)
zweite COLGROUP hat unbekannte Zahl von Spalten (TD)
Der Browser ordnet die erste 2 TD der jeweiligen TR der ersten COLGROUP zu
alle anderen TD der jeweiligen TR der zweiten COLGROUP zu
Tabelle muss IMMER bereits erzeugt worden sein per DOM
var X00=document.createElement('TABLE');
var TabellenZeiger=document.body.appendChild(X00);
Variante 1 per TABLE-Objekt-Funktionen (keine DOM-Funktionen) (siehe auch unten) als effektivste Variante
Tabellenelement erzeugen am Beispiel TR
oTR = TabellenZeiger.insertRow(); // automatisch append
Variante 2 per DOM uund Objekte THEAD, TBODY, TFOOT, CAPTION als sehr umständliche Variante
Diese Objekte erzeugen Beispiel für TBODY
var X00=document.createElement('TBODY');
var TBODYObjekt=TabellenZeiger.appendChild(X00);
Tabelle darf mehrere TBODY haben
TD und TR erzeugen am Beispiel für TR im TBODY
var X00=document.createElement('TR');
var TRObjekt=TBODYObjekt.appendChild(X00);
THEAD darf enthalten TR (auch mehrere) und damit auch TD
TBODY darf enthalten TR (auch mehrere) und damit auch TD
mehrere TBODY pro Tabelle zulässig
TFOOT darf enthalten TR (auch mehrere) und damit auch TD
CAPTION Titel der Tabelle standardgemäß über dem Tabellenbeginn
Positionierung per .valign='top'; // Standard
.valign='bottom';
mehr gibts nicht
Funktionen der Erzeugung von Tabellenelementen per Table-Objekt-Funktionen Variante 1
-------------------------------------------------------------------------------------
sind keine DOM-Funktionen
es gibt keine Funktion für COLGROUP
id_head=id_table.createTHead(); liefert Zeiger auf TH oder null
mehrere TH erzeugbar
id_table.deleteTHead(); zuletzt erzeugten TH löschen, liefert nichts
es gibt keine Index da keine Collection verfügbar (ausser document.all)
id_TR=id_table.insertRow([iRowIndex]); liefert Zeiger auf TR oder null
iIndex -1 Standard für append an rows-Collection zur Tabelle
wenn >=0 so Element an aktueller Indexpos in Collection rows eingebaut
Achtung: Index sollte lückenlos sein wegen Konsistenz des Objektes
id_table.deleteRow([iRowIndex]); löscht TR
iRowIndex Index ab 0 des TR in rows-Collection zu Tabelle
Standard letzte TR in rows-Collection
id_TD=id_TR.insertCell([iCellsIndex]); liefert Zeiger auf TD oder null
iIndex -1 Standard für append an cells-Collection zum TR
wenn >=0 so Element an aktueller Indexpos in Collection cells eingebaut
Achtung: Index sollte lückenlos sein wegen Konsistenz des Objektes
id_TR.deleteCell([iCellsIndex]); löscht TD
iCellsIndex Index ab 0 des TD in cells-Collection
Standard letzte TD in cells-Collection zu TR
id_TFoot=id_table.createTFoot(); liefert Zeiger auf Foot oder nul
mehrere Foot erzeugbar
id_tabelle.deleteTFoot(); zuletzt erzeugten Foot löschen, liefert nichts
es gibt keine Index da keine Collection verfügbar (ausser document.all)
id_Caption=id_table.createCaption(); liefert Zeiger auf Caption oder nul
mehrere erzeugbar aber nur die ERSTE Caption lsöchbar !
id_table.deleteCaption(); löscht NUR ZUERST erzeugtes Caption
es gibt keine Index da keine Collection verfügbar (ausser document.all)
für Indexe siehe unten Collectionen
Tipp: Zeigerfeld aufbauen zur Tabelle Beispiel:
// +++++ Datenfelder indexsynchron und identische Länge
var X00=new Array
(true, // 1. TR, 1. Element MUSS TR sein
false,false,false, // alle TD der 1. TR
true, // 2. TR
true, // 3. TR
false // alle TD der 3. TR
);
var X00a=new Array // .innerHTML
('', // 1. TR kein Inhalt da .innerText und .innerHTLM nicht belegbar
'a','b','c', // alle TD der 1. TR
'',
'',
'<B>d</B>' // alle TD der 3. TR
);
// +++++ Zeigerfeld der Tabellenelemente erzeugen
var X01=new Array();
// +++++ Tabelle erzeugen per DOM
var X02=document.createElement('TABLE');
var X03=document.body.appendChild(X02);
// +++++ Caption erzeugen
var X99=X03.createCaption();
X99.innerHTML='<B>Tabellenkopf</B>';
// X00.valign='top' oder 'bottom' funktioniert nicht, immer 'top' automatisch also über Tabelle
// innerHTML-Breite per Schrift beeinfluss Tabellenbreite beim rendern !
// +++++ Tabellenelemente erzeugen
var X04=0;
var X05=X00.length; // Lange von X00 und X00a
var X06=false; // Feldelement aus X00
var X07=-1; // Index TR, muss -1 sein
var X08=-1; // Index TD in TR, muss -1 sein
for(X04=0;X04<X05;X04++) // Datenfelder abklappern
{X06=X00[X04]; // Flag auf TD bzw. TR
if(X06) // TR
{X07++; // nächstes TR einstellen
X01[X07]=X03.insertRow(); // TR in Tabelle einfügen
X08=-1; // init Index TD
}
else // TD zum aktuellen TR
{X08++; // nächstes TD einstellen
X01[X07][X08]=X01[X07].insertCell();
X01[X07][X08].innerHTML=X00a[X04];
}
}
.innerText und .innerHTML
-------------------------
TR-Objekt nur lesbar
TD-Objekt lesen und schreiben
Collectionen zu Tabellenelementen TR und TD
-------------------------------------------
Tabelle hat Collection row aller TR der Tabelle id_tabelle.rows
tBodies aller TBODY der Tabelle id_tabelle.tBodies
jede TR hat eigene Collection cells aller TD zum TR id_TR.cells
Collectionen haben Eigenschaft .length
werden gefüllt in Reihenfolge der Erzeugung der Tebellenelemente
id_objekt.sourceIndex liefert Index ab 0 aus Collection document.all (nur lesen)
id-Objekt TD, TR, TH, Tbody, TFoot, Caption
TR und TD haben folgende Eigenschaften bezüglich zugehöriger Collection:
liefern Index des Objektes in Collection (nur lesen, Index ab 0)
id_TR.rowIndex liefert Index ab 0 aus row-Collection der Tabelle
id_TD.cellIndex liefert Index ab 0 aus cells-Collection des zugehörigen TR-Objektes