2009-05-22 5 views
9

Ist getElementByClass sicher in Browsern wie getElementById zu verwenden?Ist getElementByClass sicher in Browsern wie getElementById zu verwenden?

aktualisiert Derzeit verwenden:

window.opener.document.getElementById 

Aber ich will das Objekt von Klassennamen verweisen (es wird nur ein Element mit dem Klassennamen sein).

+1

Wenn es nur eine ist, es wäre Es ist effizienter, nach ID zu suchen, da das Durchsuchen des DOM für eine bestimmte Klasse nicht ideal ist, aber wenn Sie müssen, würde ich ein Framework wie jQuery empfehlen – xenon

Antwort

2

IIRC, getElementsByClassName wurde in Firefox 3, Safari 3.1 eingeführt und war seit Anfang in Chrome. Ich weiß nicht, ob/wann es zu Opera hinzugefügt wurde, aber es ist überhaupt nicht im Internet Explorer vorhanden. (Obwohl kann es durch die Erweiterung der DOM-Prototypen zu IE8 hinzugefügt werden, siehe Grant's answer.)

Mit anderen Worten, wenn Sie einen Cross-Browser wollen getElementsByClassName, müssen Sie entweder Ihre eigene Rolle oder einen Rahmen verwenden.

+0

Safari und Chrome verwenden WebKit als HTML-Rendering-Engine. – Gumbo

+2

Das stimmt, aber sie verwenden verschiedene Javascript-Engines. – mishac

+1

@Gumbo - Sicher, aber was hat das mit dem Teepreis in China zu tun? :-) –

2

Wie bereits erwähnt, ist getElementsByClassName im Internet Explorer nicht verfügbar.

Informationen zur Implementierung der Funktionalität in IE finden Sie im Abschnitt Customizing the DOM von Document Object Model Prototypes, Part 1: Introduction.

+0

Es sieht so aus, als ob das nur mit IE8 funktioniert. Sie können "Element.prototype" oder "HTMLDocument.prototype" in IE6 (oder, glaube ich, 7) nicht erweitern. –

1

Wenn Sie es wirklich verwenden möchten, können Sie testen, ob das Objekt getElementsByClassname unterstützt, bevor Sie es verwenden, und auf eine JS-Implementierung der Funktion zurückgreifen, wenn der Browser dies nicht unterstützt.

1

würde ich vorschlagen, eine Wrapper-Bibliothek wie prototype.js oder jQuery verwenden, die sowohl einen CSS-Selektor-Modell unterstützen und Browser-Kompatibilitätsprobleme behandeln (IE6-7 in der Regel die größeren Probleme zu sein)

+0

funktioniert jquery in einem Aufruf von window.opener obwohl? – Blankman

+0

Wenn es in den Öffner geladen wird ... window.opener. $ ('...') funktioniert;) – Tracker1

9

getElementsByClassName ist leider nicht zuverlässig Cross-Browser. Es wird derzeit von den neuesten Versionen von Firefox, Opera, Safari und Chrome, aber überhaupt nicht in Internet Explorer oder Konqueror gemäß Quirksmode unterstützt.

Wenn Sie es Cross-Browser verwenden möchten, müssen Sie müssen für diese Browser eine eigene Implementierung zur Verfügung zu stellen, die diese Funktion nicht unterstützen, like in PPK's blog:

function getElementsByClassName(node,classname) { 
    if (node.getElementsByClassName) 
     return node.getElementsByClassName(classname); 
    else { 
     // your custom function 
    } 
} 
+1

Es hat schon viel Arbeit von anderen auf "// Ihre benutzerdefinierte Funktion" getan, also nicht fühle dich wie du es selbst machen musst. Ein konkretes Beispiel wäre SizzleJS: http://sizzlejs.com/ –

Verwandte Themen