• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

getElementsByClassName seltsames verhalten

Sharki

Neues Mitglied
Moin moin
ich nutze in einer Unterroutine folgenden code :

ST = document.getElementsByClassName("ST"); // clear backgroundcolor before setting new event
for (i=0;i < ST.length;i++) {
if (ST.style.backgroundColor == 'rgb(127,255,0)')
ST.style.backgroundColor = "";
}
ST = document.getElementsByClassName("Time_A Time_B Time_C"); // clear backgroundcolor before setting new event
for (i=0;i < ST.length;i++) {
if (ST.style.backgroundColor == 'rgb(127,255,0)')
ST.style.backgroundColor = "";
}

Erstaunlicherweise findet getElementsByClassName("Time_A Time_B Time_C") im zweiten oder weiteren durchläufen die Klassen Time_A/B/C nicht mehr. Können das irgendwelche Seitenefekte sein. Diese Routine wird via SetInterval gestartet.

Grüße Hajo
 
Werbung:
Das wird alle 3 Sec ausgeführt. Ich frage mich halt warum der erste Aufruf immer funktioniert und der die Suche nach ST funktioniert auch immer ....
 
Werbung:
Das wird alle 3 Sec ausgeführt. Ich frage mich halt warum der erste Aufruf immer funktioniert und der die Suche nach ST funktioniert auch immer ....

Wenn du es genau wissen willst, öffne die Developer Tools deines Browsers und setze Breakpoints im Script.

Der Code ist so was von 1996. Warum machst du es nicht einfach mit jQuery? Da gibt es ein Foreach, und statt der Inline-Styles kann man auch CSS-Klassen verwenden.

Code:
$('.foo').each(function() {
  if ($(this).hasClass('bar')) {
    $(this).removeClass('bar');
  }
});

Das ist kürzer und übersichtlicher.
 
Werbung:
Weil mein Code auf einem PIC24 mit Flash Speicher unterkommen muß. Da passt jQuery nicht rein. Auch extern laden geht nicht , da eine adhoc Verbindung aufgebaut werden kann.

Und das das Problem auftritt weiß ich durch Developer Tool und Breakpoint setzen.
 
Na schön, wenn es ohne jQuery sein soll:
- Hast du in der Konsole überprüft, wie viele Elemente ST.length besitzt?
- Hst du es mit for in statt for versucht?
 
Jep
Nein
Ändert nichts daran das der eine Aufruf geht und der andere nicht. Ein Umstellen ändert nichts. Die Variante mit drei Klassen suchen endet in length = 0. :-(
 
Werbung:
Mein Fehler :) Ich suche nach Time_A oder Time_B oder Time_C getElementsByClassName sucht dabei nach UND.

mon oh mn....
 
Und hast du eine Erklärung dafür, dass der erste Durchlauf funktionierte?
 
Werbung:
Zurück
Oben