DOM: Mehrere span-Elemente eines "Typs" ermitteln
Joerg Peschke
- javascript
0 Kai F. Lahmann0 Marc Plogas0 Cybaer0 Danke!
Jörg Peschle0 Bio
Hallo,
Vielleicht kann mir jemand bei folgendem Problem helfen:
Ich möchte per JavaScript unter dem DOM auf mehrere span-Elemente
zugreifen, die zusammengehören, und diesen dann eine neue CSS-Klasse
zuweisen.
Meine Idee, allen zusammengehörigen span-Attributen dasselbe name-Attribut zu geben, und dann über document.getElementsByName
darauf zuzugreifen, ist nicht W3C-konform, weil spans ja eigentlich kein name-Attribut haben, deshalb geht das nur unter dem Mozilla, wie ich festgestellt habe, aber z.B. nicht im IE.
Fällt dazu jemandem eine Lösung ein? Das Ding muss primär nur auf IEs in neueren Versionen laufen, wenns aber in Mozilla & Co. auch ginge, wäre super.
Danke schonmal fürs Mitdenken,
Jörg
Meine Idee, allen zusammengehörigen span-Attributen dasselbe name-Attribut zu geben, und dann über document.getElementsByName darauf zuzugreifen, ist nicht W3C-konform, weil spans ja eigentlich kein name-Attribut haben, deshalb geht das nur unter dem Mozilla, wie ich festgestellt habe, aber z.B. nicht im IE.
vor allem aber darf es jeden name="" oder id="" (is das gleiche) nur einmal geben.
hi,
vor allem aber darf es jeden name="" oder id="" (is das gleiche) nur einmal geben.
das gilt für id, nicht für name.
gruß,
wahsaga
das gilt für id, nicht für name.
Jo. Mein (funktionierender) Ansatz arbeitet mit id's die alle aehnlich, aber nicht identisch sind (also etwas wie "gruppe1_0, gruppe1_1, gruppe1_2,....gruppe1_n, gruppe2_0, gruppe2_1,...").
Dann hole ich mir mit getElementsByTagname('span') alle spans und vergleiche die IDs mit Regexp auf den Gruppennamen.
Gehen tuts damit, aber es ist natürlich schrecklich langsam und unschön noch dazu :(
Hallo,
Mein (funktionierender) Ansatz arbeitet mit id's die alle aehnlich, aber nicht identisch sind (also etwas wie "gruppe1_0, gruppe1_1, gruppe1_2,....gruppe1_n, gruppe2_0, gruppe2_1,...").
Dann hole ich mir mit getElementsByTagname('span') alle spans und vergleiche die IDs mit Regexp auf den Gruppennamen.
Ich hatte hier http://forum.de.selfhtml.org/archiv/2004/4/77672/#m448537 mal eine Funktion getElementsByIdFragment() formuliert.
MfG, Thomas
das gilt für id, nicht für name.
für "name" gilt es auch, sobald es eine mit "ID" identische Aufgabe über nimmt (Zuordnung in einer Imagemap, Linkanker..)
Hi,
für "name" gilt es auch, sobald es eine mit "ID" identische Aufgabe über nimmt (Zuordnung in einer Imagemap, Linkanker..)
Keineswegs. Es ist dann nur nicht definiert, welches NAME-Element der Browser anspricht (z.B. bereits bei DOM-Level-0: AFAIR fangen manche beim ersten an, manche beim letzten). Es ist dir aber natürlich (wie immer) freigestellt, alle entsprechenden Elemente durchzugehen.Schließlh heißt es nicht umsonst getElementsbyName() und liefert dir ein Array ...
Gruß, Cybaer
Hi,
vor allem aber darf es jeden name="" oder id="" (is das gleiche) nur einmal geben.
Falsch.
Probier mal, mit der von Dir behaupteten Regel (jeder name-value darf nur einmal vorhanden sein) eine Gruppe von Radiobuttons zu definieren.
cu,
Andreas
Hallo,
eigentlich ist es recht einfach...
Zuersteinmal benötigst du folgende STruktur im HTML Dokument:
<div id="container">
<span></span>
<span></span>
</div>
dann gehst du übers JS auf die span's:
if (document.getElementById)
var x = document.getElementById('container').getElementsByTagName('SPAN');
else if (document.all)
var x = document.all['container'].all.tags('SPAN');
else return;
Nun kannst Du über
for (i=0;i<x.length;i++) {
x[i].eigenschaft oder was auch immer du ändern willst
}
auf die einzelnen Spans zugreifen oder von den einzelnen Spans events abfangen.
Hoffe das hilft.
Marc
hi,
var x = document.getElementById('container').getElementsByTagName('SPAN');
und das soll funktionieren?
gruß,
wahsaga
hi wahsaga,
und das soll funktionieren?
Ja. Leider sind damit (ob weitergehend verschachtelt oder nicht) alle Elements span innerhalb von getElementById('container') angesprochen.
Zumindest bei relativ neuen Browsern kann man so auf innere Elemente zugreifen.
Gruß aus Berlin!
eddi
Zumindest bei relativ neuen Browsern kann man so auf innere Elemente zugreifen.
Richtig. Relativ ist auch hier das richtige Wort, denn bisher hab ich noch keinen Browser erlebt, der das nicht unterstützt. Ich muss allerdings zugeben, dass ich nicht in der Lage war einen Browser der Generation 3 aufzutreiben ;)
Zumal es eine recht saubere Methode ist, an die Elemente deiner Wahl heranzukommen. Näheres dazu unter www.quirksmode.org
cheers
Marc
Hallo,
Zumindest bei relativ neuen Browsern kann man so auf innere Elemente zugreifen.
Richtig. Relativ ist auch hier das richtige Wort, denn bisher hab ich noch keinen Browser erlebt, der das nicht unterstützt. Ich muss allerdings zugeben, dass ich nicht in der Lage war einen Browser der Generation 3 aufzutreiben ;)
Da fällt mir promt doch eine Frage ein:
Gibt es irgend eine Möglichkeit IE auf Linux zu integrieren?
(Befor das gelächter jetzt über den Sinn ausbricht: Er wäre für Testzwecke von erstellten Seiten, damit das OS nicht immer gewechslet werden muß).
Gruß aus Berlin!
eddi
Gibt es irgend eine Möglichkeit IE auf Linux zu integrieren?
versuch's mit Wine.
Hallo Kai,
google liefert mir dazu einen Haufen von Wein-O-Shops. hast Du noch einen link für mich [liebguck]?
Gruß aus Berlin!
eddi
google liefert mir dazu einen Haufen von Wein-O-Shops. hast Du noch einen link für mich [liebguck]?
*hicks*
http://www.winehq.com
<lall>der sollte es tun *hicks*</>
hi,
google liefert mir dazu einen Haufen von Wein-O-Shops. hast Du noch einen link für mich [liebguck]?
hättest du die suchphrase "wine" noch um "linux" ergänzt - wärst du sofort richtig gelandet :-)
gruß,
wahsaga
hättest du die suchphrase "wine" noch um "linux" ergänzt - wärst du sofort richtig gelandet :-)
un das janz ohne allohol :)
hi,
hättest du die suchphrase "wine" noch um "linux" ergänzt - wärst du sofort richtig gelandet :-)
Stimmt! :\ (Darf ich das jetzt auf die Hitze schieben [nochviellieberalszuvorguck]?)
Gruß aus Berlin!
eddi
Hallo XaraX,
Gibt es irgend eine Möglichkeit IE auf Linux zu integrieren?
<img src="http://www.christian-seiler.de/temp/iexplore.png" border="0" alt=""> - sogar ActiveX geht bis zu einem gewissen Grad. ;-)
Und irgendwo im Netz gibt's auch noch ne Menge Seiten mit Anleitungen, wie das hinzubekommen ist. Wobei bei mir keine einzige wirklich funktioniert hat - nimm' Dir einen Tag Zeit zum Rumbasteln und dann hast Du's irgendwann hingekriegt - Du darfst halt nur nicht die Nerven verlieren.
Viele Grüße,
Christian
Hallo Christian,
Wobei bei mir keine einzige wirklich funktioniert hat - nimm' Dir einen Tag Zeit zum Rumbasteln und dann hast Du's irgendwann hingekriegt - Du darfst halt nur nicht die Nerven verlieren.
Das sind ja traumhafte aussichenten ^^
Danke für Deine Info! Da es bei Dir läuft hoffe ich, Du hältst die Augen offen nach einem baldigen Hilfegesuch zur Installation hier im Forum, wenn ich es nicht hinbekommen habe :)
Gruß aus Berlin!
eddi
Gibt es irgend eine Möglichkeit IE auf Linux zu integrieren?
(Befor das gelächter jetzt über den Sinn ausbricht: Er wäre für Testzwecke von erstellten Seiten, damit das OS nicht immer gewechslet werden muß).
versuch mal mit http://forums.gentoo.org/viewtopic.php?t=148168 Ist zwar für Gentoo aber müsste auch auf anderen Distr. übertragbar sein. Wichtig ist, glaube ich, die wine - Version. Bei mir hat es innerhalb von etwa 15 Minuten gleich funktioniert. Die dcom98.exe musst du im Internet finden. Bei mir hat dis URL nicht funktioniert.
Viel Erfolg!
Hallo,
Danke für Deinen Tip mit den Container-Divs. Das Problem ist allerdings, dass die Spans die zusammen gehören, theoretisch auch verstreut auf der Seite liegen können.
Also es kann etwas geben wie
<span>Gruppe1</span>
<span>Gruppe1</span>
<span>Gruppe1</span>
<span>Gruppe1</span>
<span>Gruppe2</span>
<span>Gruppe2</span>
<span>Gruppe1</span>
<span>Gruppe1</span>
In so einem Fall krieg ich keinen Container mehr drumrumgebaut.
Zuersteinmal benötigst du folgende STruktur im HTML Dokument:
<div id="container">
<span></span>
<span></span>
</div>
Hallo,
Danke für Deinen Tip mit den Container-Divs. Das Problem ist allerdings, dass die Spans die zusammen gehören, theoretisch auch verstreut auf der Seite liegen können.
Dann musst du auf die Elemente nur mit getElementByTagName zugreifen. Dazu solltest Du aber die genaue Position der Elemente kennen. du darfst also dann nicht span[1] mit span[2] verwechseln ;)
Vllt hilft Dir das, wenn nicht geht immer noch der ID Trick.
Marc
Hallo,
... Das Problem ist allerdings, dass die Spans die zusammen gehören, theoretisch auch verstreut auf der Seite liegen können.
Sie müßten sich doch aber zumindes identifizieren lassen, da Du im Ausgangsposting schreibst, daß Du die Class ändern willst, gehe ich davov, sie haben im Ursprung die selbe Class. Das ist dann eindeutig genug.
Thomas Meinike hatte dazu vor einigen Tagen gute Verweise in einem Posting angegeben:
http://forum.de.selfhtml.org/archiv/2004/8/86284/#m510282
Durch ein wenig Umformung sollte das Dich hoffentlich glücklich machen ;)
Gruß aus Berlin!
eddi
wie wäre es, wenn man einfach allen eine CSS-Klasse verpasst und diese ändert?
else if (document.all)
var x = document.all['container'].all.tags('SPAN');
schmeiß den Ast mal weg. MSIE4 ist so selten wie 20° im Dezember.
Hi,
ist nicht W3C-konform, weil spans ja eigentlich kein name-Attribut haben, deshalb geht das nur unter dem Mozilla, wie ich festgestellt habe, aber z.B. nicht im IE.
Ich nehme dafür das proprietäre Attribut GID (Group Id) und durchsuche danach alle Elemente, die mir getElementsByTagName() liefert (s. http://Coding.vampirehost.de/Toggle).
Der "Trick": Das DOM ist für XML ausgelegt und in XML kannst Du ja auch eigene Attribute definieren. In HTML ist das Dokument nunmehr zwar nicht mehr valide nach den W3C-DTDs, aber immer noch wohlgeformt.
Die "validen" Alternativen mit NAME oder CLASS scheitern an unterschiedlichem Browserverhalten (bei letzterer streikt Opera) - diese nicht.
Funktionierende valide Alternative: IDs ergänzen mit einer (fortlaufenden) Nummer. Genannte Funktion toggle() beherrscht auch das (ist halt umständlicher und auch weniger flexibel).
Gruß, Cybaer
Danke für die vielen Hilfestellungen!
Das, was jemand (XaraX?) geschreiben hat zum Austauschen von Elementen in CSS-Klassen, war sehr hilfreich, nach sowas hatte ich ursprünglich gesucht, als ich das Ding programmiert habe - werde es damit mal probieren.
Die anderen Möglichkeiten werde ich mir ebenfalls mal in Ruhe begucken.
Nochmal danke für die Zahlreichen Ideen und die schnelle Hilfe.
Jörg
Sup!
Sach' mal Peschke, alter Trekkie, was machst Du denn hier?
Gruesse,
Bio
Sach' mal Peschke, alter Trekkie, was machst Du denn hier?
Ich poste in ein Internet-Forum :).
Und wer oder was bist Du?
Deine Mail-Adresse kommt mir bekannt vor irgendwie.
Hallo Jörg,
Ich poste in ein Internet-Forum :).
Und wer oder was bist Du?
Zu Bio: http://www.atomic-eggs.com/selfspezial/daten/69.html
Viele Grüße,
Christian
hallo Christian,
Zu Bio: http://www.atomic-eggs.com/selfspezial/daten/69.html
Bei dieser Gelegenheit: werden denn die Visitenkarten mal nach http://community.de.selfhtml.org übernommen, so daß man endlich mal wieder ran kann und eine Aktualisierung machen? Ich sehe an meinen Server-logs, daß gelegentlich jemand meine Visitenkarte nicht nur findet, sondern auch aufruft und von dort zu meinr Adresse weitermarschiert, und ich würde die Visitenkarte liebend gerne aktualisieren - oder, wenn das nicht geht, ganz einfach löschen.
Grüße aus Berlin
Christoph S.