reguläre Ausdrücke zur Tabellenmanipulation
Günter Marchewka
- javascript
Guten Abend liebes Forum,
ich habe immer meine Probleme mit regulären Ausdrücken und habe mir deshalb folgende Aufgabe gestellt:
Auf eine Tabelle mit einer beliebigen Anzahl von Zeilen und Spalten, mit beliebigen Inhalten in den Zellen möchte ich folgende Operationen anwenden:
var neuCellZeile = '';
var neuInhalt = '';
if (mach == 'Neu')
{
document.all.oData.innerHTML = oDataData;
}
if (mach == 'LinksPlus')
{
neuInhalt = document.all.oData.innerHTML.replace(/<TR>/g,'<TR><TD><img src="Leer.gif"></TD>');
neuCellZeile = aktCellZeile.replace(/<TR>/ig,'<TR><TD><img src="Leer.gif"></TD>');
document.all.oData.innerHTML = neuInhalt;
aktCellZeile = neuCellZeile;
}
if (mach == 'RechtsPlus')
{
neuInhalt = document.all.oData.innerHTML.replace(/</TR>/ig,'<TD><img src="Leer.gif"></TD></TR>');
neuCellZeile = aktCellZeile.replace(/</TR>/ig,'<TD><img src="Leer.gif"></TD></TR>');
document.all.oData.innerHTML = neuInhalt;
aktCellZeile = neuCellZeile;
}
if (mach == 'ObenPlus')
{
neuCellZeile = aktCellZeile + '<TR>';
neuInhalt = document.all.oData.innerHTML.replace(/<TR>/i,neuCellZeile);
document.all.oData.innerHTML = neuInhalt;
}
if (mach == 'UntenPlus')
{
neuCellZeile = aktCellZeile + '</TABLE>';
neuInhalt = document.all.oData.innerHTML.replace(/</TABLE>/i,neuCellZeile);
document.all.oData.innerHTML = neuInhalt;
}
if (mach == 'ObenMinus')
{
neuInhalt = document.all.oData.innerHTML.replace(/(</TR>)/i,'#').replace(/<table[^>]*>/i,'µ').replace(/µ[^#]*#/i,'<table id=oTable cellpadding=0 cellspacing=0>');
document.all.oData.innerHTML = neuInhalt;
}
if (mach == 'LinksMinus')
{
neuInhalt = document.all.oData.innerHTML.replace(/<TR>/ig,'#').replace(/</TD>/ig,'µ').replace(/#[^µ]*µ/ig,'<TR>').replace(/µ/ig,'</td>');
document.all.oData.innerHTML = neuInhalt;
}
if (mach == 'RechtsMinus')
{
neuInhalt = document.all.oData.innerHTML.replace(/</TR>/ig,'#').replace(/<TD>/ig,'µ');
neuInhalt = neuInhalt.replace(/µ.+#/ig,'</TR>');
neuInhalt = neuInhalt.replace(/µ/ig,'<TD>');
document.all.oData.innerHTML = neuInhalt;
}
if (mach == 'UntenMinus')
{
neuInhalt = document.all.oData.innerHTML.replace(/</TABLE>/ig,'#').replace(/<TR>/ig,'µ');
neuInhalt = neuInhalt.replace(/(µ.+#)/i,'</TABLE>');
neuInhalt = neuInhalt.replace(/µ/ig,'<TR>');
document.all.oData.innerHTML = neuInhalt;
}
oTable.onclick = onclickCell;
document.onclick = cancelSelect;
}
Mit dem Code für "UntenMinus" soll eine Struktur wie
<tr><td>blabla...</td><td>...</td><td>viele Zellen...</td></tr></tbody></table>
gewandelt werden in </table>
Danke für das Interesse!
Günter
Hallo Günther
nein, dass ist keine Lösung deines Problemes, sondern einfach ein neuer Ansatz. Deinem Script entnehme ich, dass du sowieso nur für den IE schreibst.
Warum nutzt du dann nicht die wirklich praktischen Methoden des Tabellenobjektes?
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/table.asp
Die arbeiten wirklich zuverlässig.
Viele Grüße
Antje
Hallo Antje,
Warum nutzt du dann nicht die wirklich praktischen Methoden des Tabellenobjektes?
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/table.asp
Die arbeiten wirklich zuverlässig.
Ja da hast du Recht.
Dort gibt es ein sehr schönes Beispiel mit einem Puzzle, durch das ich auch bereits durchgegangen bin.
Die Ausrichtung meines Beispiels liegt nicht unbedingt darin, das ich etwas mit Tabellen machen wollte, sondern besser die regulären Ausdrücke und ihre Funktionsweisen verstehen möchte.
Im Beispiel nur IE ist richtig, da ich auf diesem Rechner nur IE5.0 habe, nutze ich document.all. Die Änderung in getelementsbyid um es im Netscape6 oder IE5.5 zum Laufen zu bringen ist relativ geringfügig.
Nach meinen ersten _Erfolgen_ mit hinzufügen und entfernen war ich fast der Meinung, nun hab ich es, aber irgendwie doch nicht...
Na ja, auf jeden Fall Danke für Dein Interesse!
Viele Grüße
Günter