User1989: document.getelementsbyclassname

Hallo, ich habe ein JavaScript Code programmiert, welches in Firefox funktioniert. In Internet Explorer kriege ich aber leider den Fehler, dass
der Befehl document.getElementsByClassName nicht unterstützt wird.
Was kann ich als Ersatz in mein Code reinschreiben?

  1. Hi!

    Was kann ich als Ersatz in mein Code reinschreiben?

    Das Richtige.

    Mann! Wer soll denn bitte mit Deiner vagen Beschreibung etwas anfangen können?

    off:PP

    --
    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
    1. Hi!

      Was kann ich als Ersatz in mein Code reinschreiben?

      Das Richtige.

      Mann! Wer soll denn bitte mit Deiner vagen Beschreibung etwas anfangen können?

      off:PP

      Was soll ich noch angeben?

      1. @@User1989:

        nuqneH

        Was soll ich noch angeben?

        Zunächst einmal den Sinn dahinter: Was willst du mit allen Elemente dieser Klasse anstellen?

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
  2. Mahlzeit User1989,

    Was kann ich als Ersatz in mein Code reinschreiben?

    LMGTFY

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:& n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Mahlzeit User1989,

      Was kann ich als Ersatz in mein Code reinschreiben?

      LMGTFY

      MfG,
      EKKi

      Haahahaha... Habe es mittlerweile schon gelöst danke

      1. @@User1989:

        nuqneH

        Haahahaha...

        Du solltest nicht die Antwortenden auslachen, sonst antwortet dir blad niemand mehr. Wenn hier was lächerlich ist, dann deine Fragen.

        Habe es mittlerweile schon gelöst danke

        Wenn du zeigen würdest, wie und warum, dann könnte man auch drüberschauen, ob du es _gut_ gelöst hat.

        Qapla'

        PS: Zitiere bitte sinnvoll, nicht alles!

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. Du solltest nicht die Antwortenden auslachen, sonst antwortet dir blad niemand mehr. Wenn hier was lächerlich ist, dann deine Fragen.

          Ich habe nicht Ekki ausgelacht, sondern über die Seite LMGTFY. Sorry, wenn es missverständlich war.

          PS: Zitiere bitte sinnvoll, nicht alles!

          Okay.

          »»Wenn hier was lächerlich ist, dann deine Fragen.

          Findest du meine Frage lächerlich? Oder nur unzureichend gestellt?

          1. Hallo,

            Findest du meine Frage lächerlich?

            nein, das nicht.

            Oder nur unzureichend gestellt?

            Eventuell, ja.

            Vielmehr habe ich aber den Eindruck, dass es dir am prinzipiellen Verständnis fehlt. Ich habe den Eindruck, du sammelst hier und da ein paar Code-Stückchen auf und flickst sie zusammen, ohne zu verstehen, was sie eigentlich tun. Denn mit etwas eigener Überlegung wäre dieser Thread hier überflüssig gewesen. Sobald man versteht, was getElementsByClassName() eigentlich tut, wäre es ein Leichtes, diese Funktion unter Verwendung von getElementsByTagName() nachzubauen.

            Mal abgesehen davon, dass man durch eigene Suche auch diverse fertig implementierte Beispiele für getElementsByClassName() hätte finden können.

            So long,
             Martin

            --
            If you believe in telekinesis, raise my hand.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          2. @@User1998:

            nuqneH

            Findest du meine Frage lächerlich?

            Diese nicht. Vielleicht einige andere von dir.

            Oder nur unzureichend gestellt?

            Das ja.

            Die Frage nach dem Warum steht immer noch unbeantwortet im Raum.

            Wenn es bspw. dein Ziel ist, alle Elemente einer Klassed dynamisch ein anderes Aussehen zu geben, ist getElementsByClassName kein guter Weg.

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
            1. @@User1998:

              nuqneH

              Findest du meine Frage lächerlich?

              Diese nicht. Vielleicht einige andere von dir.

              Oder nur unzureichend gestellt?

              Das ja.

              Die Frage nach dem Warum steht immer noch unbeantwortet im Raum.

              Wenn es bspw. dein Ziel ist, alle Elemente einer Klassed dynamisch ein anderes Aussehen zu geben, ist getElementsByClassName kein guter Weg.

              Qapla'

              Ohne beispiele zu nennen, kann man vieles sagen. Welche Fragen denn genau?
              Aber lassen wir es bleiben. Ich stelle in Zukunft zu meinen Problemen mehr Informationen bereit. Auf jeden Fall danke für Hilfen.

              1. @@User1989:

                nuqneH

                Ohne beispiele zu nennen, kann man vieles sagen. Welche Fragen denn genau?

                Welcher Teil der Frage „Was willst du mit allen Elemente dieser Klasse anstellen?“ war denn unverständlich?

                Qapla'

                PS: Zitiere bitte sinnvoll, nicht alles!

                --
                Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                (Mark Twain)
  3. Hallo User1989,

    document.getElementsByClassName

    funktioniert nicht in allem Browsern. Eine Internetsuche sollte aber reichlich Browserübergreifende Varianten liefern, hier mal meine:

      
    var JB_getElementsByClass_TagName=function(tagname,classname) {  
     var tag=document.getElementsByTagName(tagname);  
     var Elements=new Array();  
     for(var i=0;i<tag.length;i++) {  
      if(tag[i].className.indexOf(classname)>-1) Elements[Elements.length]=tag[i];  
     }  
     return Elements;  
    }  
    
    

    setzt das aber nicht ungeprüft ein, versuch den Code zu verstehen. Und wenn du eine bessere Variante findest, nimm die.

    Gruß, Jürgen

    1. Hi,

      var JB_getElementsByClass_TagName=function(tagname,classname) {
      var tag=document.getElementsByTagName(tagname);
      var Elements=new Array();
      for(var i=0;i<tag.length;i++) {
        if(tag[i].className.indexOf(classname)>-1) Elements[Elements.length]=tag[i];
      }
      return Elements;
      }

      
      >   
      > setzt das aber nicht ungeprüft ein,  
        
      Setze das gar nicht ein!  
        
      ein einfaches indexOf im class-Attribut ist NICHT ausreichend.  
      Suche nach Klasse "bla" in class="blabla" liefert einen Treffer, der nicht geliefert werden dürfte - denn das Element gehört NICHT zur Klasse "bla".  
        
      cu,  
      Andreas
      
      -- 
      [Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)  
      [O o ostern ...](http://ostereier.andreas-waechter.de/)  
        
      Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.  
      
      
      1. Hallo MudGuard,

        ein einfaches indexOf im class-Attribut ist NICHT ausreichend.

        stimmt, aber in meinem Fall ist es sogar erwünscht. "It's not a bug, it's a feature." Ich habe nur nicht mehr dran gedacht. Eine Suche mit regulärem Ausdruck und der Option "\b" wäre im allgemeinen Fall wohl besser.

        Gruß, Jürgen

        1. [latex]Mae  govannen![/latex]

          ein einfaches indexOf im class-Attribut ist NICHT ausreichend.

          stimmt, aber in meinem Fall ist es sogar erwünscht. "It's not a bug, it's a feature."

          It's always a bug. Du kannst nicht sicherstellen, daß eine bestimmte Zeichenkette nicht "versteckt" innerhalb einer anderen Zeichenkette vorkommt und man sie übersieht. (Siehe das berühmte Beispiel arsch und Marschgepäck) Heißt: Du mußt bei jedem vergebenen Klassenbezeichner sämtliche Anderen prüfen. Oder du hast sehr schnell ein Element mit in der Kollektion, das du eigentlich gar nicht haben wolltest.

          Ich habe nur nicht mehr dran gedacht. Eine Suche mit regulärem Ausdruck und der Option "\b" wäre im allgemeinen Fall wohl besser.

          Ich weiß nicht mehr (und kann es gerade nicht testen), ob es nur \w war oder auch \b oder beide oder keines davon je nach Browser oder allgemein Probleme mit Zeichen außerhalb der ASCII-Raumes haben. Das würde also wiederum eine Einschränkung der möglichen Klassenbezeichner darstellen.

          reg = new RegExp('(^|\\s)' + class_name + '(\\s|$)', 'gi');

          dürfte es tun, zumindest solange man Standard-Leerzeichen oder Tab zur Trennung benutzt, da auch \s nicht bei allen Browsern gleich belegt ist.

          Stur lächeln und winken, Männer!
          Kai

          --
          Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
          in Richtung "Mess up the Web".(suit)
          SelfHTML-Forum-Stylesheet
          1. Hallo,

            Ich habe nur nicht mehr dran gedacht. Eine Suche mit regulärem Ausdruck und der Option "\b" wäre im allgemeinen Fall wohl besser.

            Ich weiß nicht mehr (und kann es gerade nicht testen), ob es nur \w war oder auch \b oder beide oder keines davon je nach Browser oder allgemein Probleme mit Zeichen außerhalb der ASCII-Raumes haben.

            \w ist von JavaScript 1.3 bis ECMAScript 5.1 als [A-Za-z0-9_] definiert. Nicht-ASCII-Zeichen waren immer außen vor. Da das so simpel ist, setzen es m.W. auch alle Browser so um. Das ausschließlich zu verwenden, um Klassennamen zu erkennen bzw. zu trennen, ist tatsächlich keine gute Idee.

            Für \b (als Word-Boundary, nicht als Backspace) finde ich gerade nicht die Definition in ES5, ist das überhaupt standardisiert?

            Mathias

            1. Hallo molily,

              Für \b (als Word-Boundary, nicht als Backspace) finde ich gerade nicht die Definition in ES5, ist das überhaupt standardisiert?

              ich habe etwas experimentiert, \b hat bei mir im FF nicht den gewünschten Effekt gezeigt. Das kann aber auch an mir liegen.

              Gruß, Jürgen

            2. Hi Mathias,

              Für \b (als Word-Boundary, nicht als Backspace) finde ich gerade nicht die Definition in ES5, ist das überhaupt standardisiert?

              Ein Stückchen über der von dir referenzierten Stelle, bei den Assertions: http://es5.github.com/#x15.10.2.6

              Die dort verwendete abstrakte Operation IsWordChar definiert aber ausschließlich die lateinischen Klein- und Großbuchstaben, Ziffern und _ als Wort-Zeichen.

              MfG ChrisB

              --
              RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
              1. P.S.:

                Die dort verwendete abstrakte Operation IsWordChar definiert aber ausschließlich die lateinischen Klein- und Großbuchstaben, Ziffern und _ als Wort-Zeichen.

                Also analog zu \w, worauf du ja bereits verwiesen hattest - was ja auch recht logisch ist.

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
              2. Danke für die Aufklärung!

                Mathias

              3. @@ChrisB:

                nuqneH

                Die dort verwendete abstrakte Operation IsWordChar definiert aber ausschließlich die lateinischen Klein- und Großbuchstaben, Ziffern und _ als Wort-Zeichen.

                Autsch.

                Qapla'

                --
                Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                (Mark Twain)
                1. Autsch.

                  Brendan Eich hatte 1996 nicht an I18n gedacht – und falls doch, Netscape 2 hatte ohnehin nur limitierte Unicode-Unterstützung. Demnach sind \w und \b seit 1996 so definiert, in Zukunft wird es höchstens andere Escapes geben, um Unicode-Zeichen aus bestimmten Kategorien auszuwählen.

                  Mathias

                  1. @@molily:

                    nuqneH

                    Brendan Eich hatte 1996 nicht an I18n gedacht

                    Lass mich raten: Er hatte niemals eine Freundin namens Zoë. Und naïve ist für ihn ein Fremdwort.

                    Qapla'

                    --
                    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                    (Mark Twain)
                    1. Hallo,

                      Brendan Eich hatte 1996 nicht an I18n gedacht
                      Lass mich raten: Er hatte niemals eine Freundin namens Zoë.

                      und selbst wenn: Die würde sich im Englischen (auch im Amerikanischen) möglicherweise auch ohne Trema schreiben, wie man an den Namen diverser Schauspielerinnen sieht.

                      Und naïve ist für ihn ein Fremdwort.

                      Da wiederum ist den Briten wie den Amerikanern die Schreibweise mit Trema wohl geläufig, sie wird aebr nicht konsequent verwendet.

                      Ciao,
                       Martin

                      --
                      Liebet eure Feinde - vielleicht schadet das ihrem Ruf.
                      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                    2. Lass mich raten: Er hatte niemals eine Freundin namens Zoë.

                      Nicht notwendig. 1996 nannte sie vielleicht noch zärtlich Zo&euml; bzw. Zo\u00EB.

                      Mathias

        2. Hi,

          ein einfaches indexOf im class-Attribut ist NICHT ausreichend.
          stimmt, aber in meinem Fall ist es sogar erwünscht. "It's not a bug, it's a feature." Ich habe nur nicht mehr dran gedacht.

          Auch dann noch, wenn class="ablage" gesetzt ist, und nach "bla" gesucht wird?

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
          1. Hallo MudGuard,

            ihr habt ja recht, aber ich habe dieses Script seit ca. 4 Jahren im Einsatz, die Klassennamen sind aber so speziell, dass es noch nie Kollisionen gegeben hat. Aber natürlich bleibt ein für mich akzeptables Restrisiko.

            Gruß, Jürgen

        3. Mahlzeit JürgenB,

          Eine Suche mit regulärem Ausdruck und der Option "\b" wäre im allgemeinen Fall wohl besser.

          Ausgehend von Zitat 1418:

          Was spricht im vorliegenden Fall gegen ein einfaches:

          var classes = element.className.split(' ');

          MfG,
          EKKi

          --
          sh:( fo:| ch:? rl:( br:& n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
          1. @@EKKi:

            nuqneH

            Was spricht im vorliegenden Fall gegen ein einfaches:

            var classes = element.className.split(' ');

            Dass es zu einfach ist. Klassenbezeichner könne auch durch andere Whitespace-Zeichen getrennt sein.

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)