2009-05-22 11 views
9

¿Es seguro getElementByClass para usar en navegadores como getElementById?¿Es seguro getElementByClass para usar en navegadores como getElementById?

actualización Actualmente usando:

window.opener.document.getElementById 

Pero quiero hacer referencia al objeto por el nombre de clase (sólo habrá 1 elemento con ese nombre de clase).

+1

Si sólo hay una que lo haría ser más eficiente para acceder a él por ID porque la búsqueda a través del DOM para una clase específica no es ideal, pero si debe recomendar un marco como jQuery – xenon

Respuesta

2

IIRC, getElementsByClassName se introdujo en Firefox 3, Safari 3.1, y ha estado en Chrome desde el principio. No sé si/cuándo se agregó a Opera, pero no está presente en Internet Explorer en absoluto. (Aunque se puede agregar a IE8 extendiendo los prototipos de DOM, vea Grant's answer.)

En otras palabras, si desea un navegador cruzado getElementsByClassName, tendrá que rodar el suyo o utilizar un marco de trabajo.

+0

Safari y Chrome usan WebKit como motor de representación HTML. – Gumbo

+2

Eso es cierto, pero utilizan diferentes motores de Javascript. – mishac

+1

@Gumbo - Claro, pero ¿qué tiene eso que ver con el precio del té en China? :-) –

2

Como han mencionado otros, getElementsByClassName no está disponible en Internet Explorer.

Consulte la sección Customizing the DOM de Document Object Model Prototypes, Part 1: Introduction para obtener información sobre cómo implementar la funcionalidad en IE.

+0

Parece que esto solo funciona con IE8. No puede extender 'Element.prototype' o' HTMLDocument.prototype' en IE6 (o, creo, 7). –

1

Si realmente desea usarlo, puede probar para verificar si el objeto admite getElementsByClassname antes de usarlo y recurrir a una implementación JS de la función si el navegador no lo admite.

1

se recomienda usar una biblioteca envoltorio como prototype.js o jQuery, que tanto apoyan un modelo selector CSS, y manejar los problemas de compatibilidad del navegador (IE6-7 siendo los problemas más grandes por lo general)

+0

¿funcionará jquery en una llamada a window.opener though? – Blankman

+0

si está cargado en el abridor ... window.opener. $ ('...') funciona;) – Tracker1

9

getElementsByClassName Sentimos no fiable navegador cruzado Actualmente es compatible con las versiones más recientes de Firefox, Opera, Safari y Chrome, pero no con Internet Explorer o Konqueror, según el Quirksmode.

Si desea utilizarlo a través del navegador, tendrá que tener que proporcionar su propia aplicación para aquellos navegadores que no soportan, like in PPK's blog:

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

Ha habido mucho trabajo hecho por otros en "// su función personalizada" ya, así que no lo haga siente que necesita hacerlo usted mismo. Un ejemplo específico sería SizzleJS: http://sizzlejs.com/ –

Cuestiones relacionadas