2011-01-04 19 views
5

Tengo muchas etiquetas html con class = 'class1'. Todos resultan ser/y siempre serán el mismo tipo de elemento. Por ejemplo, elementos de entrada.selector de Jquery, ¿debería especificar el tipo de etiqueta html?

¿Hay una diferencia de rendimiento entre

$("input.class1") 

y

$(".class1") 

Gracias!

NOTA: En este caso necesito información específicamente relacionada con IE8; sin embargo, es importante mencionar una solución de navegador cruzado, mis clientes solo pueden usar IE8 para que la mejor respuesta sea la mejor específicamente para IE8.

+0

debe tener en cuenta que mis clientes en este caso solo podrán ejecutar ie8 – kralco626

+0

Consideraría editar esta información en su pregunta, ya que la respuesta no sería la misma para cualquier persona que escriba código jQuery para ser consumido por una variedad más amplia de navegadores. – adamjford

Respuesta

5

Sí, hay una diferencia de rendimiento. Esto último permite que el motor de selección use el método nativo getElementsByClassName que existe en la mayoría de los navegadores principales, y debería ser ligeramente más rápido en navegadores que no admitan ese método oquerySelectorAll. El primero será más rápido en navegadores compatibles con querySelectorAll pero no en getElementsByClassName (que es prácticamente el IE 8), pero probablemente no sea tan rápido como el último para su situación.

Para su escenario, use $(".class1").

+0

Entonces, ¿hay una diferencia de rendimiento, dependiendo de qué navegador está usando, pero cuál es mejor para el uso general? – adamjford

+0

Debería haber notado en este caso particular, estoy desarrollando una aplicación interna y mis clientes solo pueden usar, por ejemplo, – kralco626

+0

@kralco: IE 6/7, o IE 8? –

0

Sí, incluido el nombre del elemento le dará un beneficio de rendimiento, ya que (para aquellos navegadores que no admiten getElementsByClassName nativo o bien) permite al navegador primero reducir el documento utilizando el método estándar getElementsByTagName, y luego solo buscar entre los de la clase.

+0

¿Alguna explicación de por qué? – Alexander

1

No estoy seguro, pero supongo que hay una diferencia.

Con el ejemplo # 1 no son sólo los de entrada-elementos para caminar artesa y buscar a los elementos con el dado className, esto debería ser (mucho?) Más rápido que caminar todos los elementos de los nodos (como en el ejemplo 2 #)

También debería depender de la versión del navegador, creo que jQuery también usará cosas como getElementsByClassName() o querySelectorAll() si están disponibles.

+0

Pensé en eso también, pero ahora ¿cómo comprobar cada elemento para ver si es una entrada y si tiene esa clase, donde como sin el ayudante de entrada, solo tiene que verificar la clase? – kralco626

+0

getElementsByTagName() es el primer paso (se usa con 'entrada' o comodín '*' - creo que sí). No debería haber diferencias significativas observando a la velocidad. Pero el resultado es diferente. Por supuesto, lleva más tiempo recorrer una DOMNodeList con 100 elementos que solo 10 elementos. Y ese es el segundo paso, recorrer la lista y obtener los elementos por su className. –

+0

Bueno, supongo que eso es lo que estoy preguntando. No sé cómo funciona Si los pasos son 1. Encuentra elementos por nombre de clase. 2. Iterar esa lista para determinar si son elementos de entrada. Entonces, si todos los elementos de ese nombre de clase son elementos de entrada, sería más rápido no especificar la entrada ... ¿no? – kralco626