Joerg Peschke: DOM: Mehrere span-Elemente eines "Typs" ermitteln

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

  1. 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.

    1. 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

      --
      I'll try being nicer if you'll try being smarter.
      1. 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 :(

        1. 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

      2. 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..)

        1. 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

          --
          Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    2. 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

      --
      MudGuard? Siehe http://www.Mud-Guard.de/
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. 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

    1. hi,

      var x = document.getElementById('container').getElementsByTagName('SPAN');

      und das soll funktionieren?

      gruß,
      wahsaga

      --
      I'll try being nicer if you'll try being smarter.
      1. 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

        --
        Manchmal trifft es einen doch ganz unverhofft t86591:
        > '..."Vorläufig abgebrochen" ist ungefähr so sinnvoll formuliert, wie "einstweilig erschossen" oder "temporär verbrannt"...'
        Ich danke Sven für diese Erkenntnis - Gott, was habe ich gelacht ;)
        1. 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

          1. 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

            --
            Manchmal trifft es einen doch ganz unverhofft t86591:
            > '..."Vorläufig abgebrochen" ist ungefähr so sinnvoll formuliert, wie "einstweilig erschossen" oder "temporär verbrannt"...'
            Ich danke Sven für diese Erkenntnis - Gott, was habe ich gelacht ;)
            1. Gibt es irgend eine Möglichkeit IE auf Linux zu integrieren?

              versuch's mit Wine.

              1. 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

                --
                Manchmal trifft es einen doch ganz unverhofft t86591:
                > '..."Vorläufig abgebrochen" ist ungefähr so sinnvoll formuliert, wie "einstweilig erschossen" oder "temporär verbrannt"...'
                Ich danke Sven für diese Erkenntnis - Gott, was habe ich gelacht ;)
                1. 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*</>

                2. 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

                  --
                  I'll try being nicer if you'll try being smarter.
                  1. hättest du die suchphrase "wine" noch um "linux" ergänzt - wärst du sofort richtig gelandet :-)

                    un das janz ohne allohol :)

                  2. 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

                    --
                    Manchmal trifft es einen doch ganz unverhofft t86591:
                    > '..."Vorläufig abgebrochen" ist ungefähr so sinnvoll formuliert, wie "einstweilig erschossen" oder "temporär verbrannt"...'
                    Ich danke Sven für diese Erkenntnis - Gott, was habe ich gelacht ;)
            2. 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. ;-)

              -> http://www.winehq.com/

              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

              1. 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

                --
                Manchmal trifft es einen doch ganz unverhofft t86591:
                > '..."Vorläufig abgebrochen" ist ungefähr so sinnvoll formuliert, wie "einstweilig erschossen" oder "temporär verbrannt"...'
                Ich danke Sven für diese Erkenntnis - Gott, was habe ich gelacht ;)
            3. 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!

              --
              Gruss Martin
    2. 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>

      1. 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

      2. 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

        --
        Manchmal trifft es einen doch ganz unverhofft t86591:
        > '..."Vorläufig abgebrochen" ist ungefähr so sinnvoll formuliert, wie "einstweilig erschossen" oder "temporär verbrannt"...'
        Ich danke Sven für diese Erkenntnis - Gott, was habe ich gelacht ;)
      3. wie wäre es, wenn man einfach allen eine CSS-Klasse verpasst und diese ändert?

    3. 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.

  3. 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

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  4. 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

  5. Sup!

    Sach' mal Peschke, alter Trekkie, was machst Du denn hier?

    Gruesse,

    Bio

    --
    Man kann aus Ackergaeulen keine Rennpferde machen
    1. 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.

      1. 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

        1. 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.