Der Martin: getElementsByClassName tut nicht bei IE

Beitrag lesen

Hi,

var getElementsByClassName = function (className, element) { ... }

damit erzeugst du die Funktion (bzw. ein Funktionsobjekt) im globalen Scope - genaugenommen also als Methode des window-Objekts.

function hide(){
  document.getElementsByClassName("Klasse")[0].style.display = "none";
  }

Hier rufst du eine Methode des document-Objekts auf, die der IE nicht kennt.

Nach wie vor streikt IE mit folgender Begründung:
Meldung: Das Objekt unterstützt diese Eigenschaft oder Methode nicht.
Zeile: 26
Zeichen: 4

Das ist dann vermutlich genau die Zeile mit dem oben zitierten Aufruf.

Woran liegt das? Habe ich da etwas völlig falsch verstanden beim Einsatz dieser Funktion?

Jein. Das Problem ist, *wo* diese Funktion aufgehängt wird. Im JS-Sprachstandard, den fast alle Browser außer dem IE kennen, ist getElementsByClassName() eine Methode des document-Objekts. Deine für den IE nachgelegte gleichnamige Methode ist aber eine Methode des window-Objekts.

Du musst also

* entweder beim Aufruf der Methode prüfen, ob document.getElementsByClassName existiert, und falls ja, dann diese Methode aufrufen, ansonsten window.getElementsByClassName - und da window das globale Objekt ist, kannst du es auch weglassen.

* oder bei der Definition der Methode prüfen, ob document.getElementsByClassName existiert, und falls ja, die Definition übergehen, andernfalls das erzeugte Funktionsobjekt dem document-Objekt als neue Methode anhängen.

So long,
 Martin

--
Kopflosigkeit schützt nicht vor Migräne.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(