tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Matthias Reitinger
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
364
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von timestamp
    timestamp timestamp ist offline Mitglied Rubin
    Registriert seit
    May 2010
    Ort
    Marburg
    Beiträge
    1.479
    Hallo Forum

    ich stehe hier for einem Rätsel. Ich habe mir eine Funktion geschrieben um HTML Objekte mit bestimmtem Klassennamen zu finden:
    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    function getElementsByClassName(class){
      elements = document.getElementsByTagName("*");
      returnArray = new Array();
      for (i = 0; i < elements.length; i++) {
        if( elements[i].className == class){
          returnArray.push(elements[i]);
        }
      }
      return returnArray;
    }

    Das Problem dabei ist, dass ich nur einen div mit entsprechender Klasse habe, dieser aber zweimal gefunden wird. Wie kann ich den Fehler beheben?
     
    Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
    ( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
    "Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
    RegEx Tutorial
    PHP Funktionsreferenz

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    das kann ich nicht nachvollziehen, bei mir liefert dies 1 Element, wenn nur eins da ist.

    Das einzig fehlerhafte am Skript ist die Nutzung des Variablennamens "class"...dies ist ein geschützer Name in JS, mein IE6 honoriert dies sogar damit, dass er das Skript nicht ausführt.

    Gut wäre auch noch, wenn du die Variablen per var deklarierst, damit sie nicht global sichtbar sind....dies könnte zu Wechselwirkungen führen.
     

  3. #3
    Avatar von timestamp
    timestamp timestamp ist offline Mitglied Rubin
    Registriert seit
    May 2010
    Ort
    Marburg
    Beiträge
    1.479
    Hmm

    ich habe es jetzt auch noch einmal getestet und die Funktion funktioniert einwandfrei. Der Fehler muss also wohl woander liegen, danke
     
    Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
    ( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
    "Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
    RegEx Tutorial
    PHP Funktionsreferenz

  4. #4
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Hallo,

    einige Browser unterstützen diese Funktion auch schon von Haus aus. Eine robuste Implementierung, die das berücksichtigt und als Fallback eine einfache Schleife verwendet (wie bei deinem Code), findet man z.B. unter http://code.google.com/p/getelementsbyclassname/

    Grüße,
    Matthias
    Sven Mintel bedankt sich. 
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  5. #5
    Avatar von hela
    hela hela ist offline Mitglied Smaragd
    tutorials.de Premium-User
    Registriert seit
    Oct 2004
    Beiträge
    1.123
    Hallo,
    bei mir hat bisher folgendes prima funktioniert, da auch multiple Klassen berücksichtigt werden:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    function getElementsByClassName(class_name){
      var returnArray = new Array(), i, j=0, testStr;
      var allElements = document.getElementsByTagName("*");
     
      for (i = 0; i < allElements.length; i++) {
        if(allElements[i].className.indexOf(class_name) > -1){
          testStr = ","+allElements[i].className.split(" ").join(",")+",";
          if(testStr.indexOf(","+class_name+",") > -1) {
            returnArray[j] = allElements[i];
            j++;
          }
        }
      }
      return returnArray;
    }
    Geändert von hela (18.07.10 um 00:02 Uhr)
     

Ähnliche Themen

  1. getElementsByClassName und IE
    Von SCIPIO-AEMILIANUS im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 16.02.09, 19:23
  2. Antworten: 2
    Letzter Beitrag: 25.04.07, 08:13
  3. Antworten: 2
    Letzter Beitrag: 27.11.05, 20:01
  4. Antworten: 4
    Letzter Beitrag: 23.04.05, 15:31
  5. Antworten: 5
    Letzter Beitrag: 09.12.03, 15:22