En jQuery, ¿el selector $ ('[id = foo]') es menos eficiente que $ ('# foo')?
Respuesta
corto y fácil: SÍ !
larga historia (aún por debajo realidad)
$('[id=foo]')
utiliza Arden (motor de consulta CSS) para seleccionar el elemento que,
$('#foo')
llamadas directamente
getElementById
.
Para tener una historia muy larga, aquí vamos: $('[id=foo]')
es un sinónimo de $('*:[id=foo]')
que utiliza el selector universal. Eso significa que solicita TODOS los nodos dentro de su marcado y luego mira cuáles de esos tienen el id === foo
(que con suerte solo coincidirá con un elemento, ID = únicos). Eso, por supuesto, es costoso, bastante costoso. ¡Y es por eso que nunca jamás deberías escribir un selector como este! Siempre califican completamente esto si es posible, como $('span:[id=foo]')
sí ,.
El selector rápido en jQuery es el selector de ID $ ('# foo'), ya que se asigna directamente a un método JavaScript nativo, getElemenById()
- 1. selector CSS para "foo que contiene barra"?
- 2. var foo = foo || alerta (foo);
- 3. Que es más eficiente: .parent(). Parent(). Parent() ~ o ~ parents (". Foo") ~ o ~ más cercano (". Foo")
- 4. En Ruby, ¿por qué `foo = true a menos que esté definido? (Foo)` hacer la tarea?
- 5. Foo f = Foo(); // no hay función de coincidencia para la llamada a 'Foo :: Foo (Foo)' ... ¿eh?
- 6. char * foo vs char * foo
- 7. jQuery $ each (arr, foo) contra $ (arr) .Cada (foo)
- 8. ¿Qué es "x && foo()"?
- 9. Es Foo * f = new Foo buen código de C++
- 10. ¿Qué significa esto? int foo = foo + 4;
- 11. Diferencia entre "struct foo *" y "foo *" donde foo es una estructura?
- 12. Foo no se puede convertir a Foo
- 13. ¿Hay alguna diferencia entre [& foo] {...} captura y [foo] {...} captura si 'foo' es una variable de referencia?
- 14. 'var foo = función ...' y 'la función foo() ...'
- 15. Referencia estándar para int foo = foo
- 16. ¿Por qué "foo" .toString() no es lo mismo que toString.call ("foo")?
- 17. ¿Es el reemplazo de comando $ (foo) bashism?
- 18. ¿De qué sirve decir "#define FOO FOO" en C?
- 19. ¿Para qué es el proyecto de PS ($ Foo) en mi solución $ Foo ATL?
- 20. ¿Por qué Amazon S3 no sirve automáticamente /foo/index.html cuando solicito/foo o/foo /?
- 21. Diferencia entre clase foo y clase foo (objeto) en Python
- 22. es el operador + menos eficiente que StringBuffer.append()
- 23. ¿Cuál es el nombre de una función [foo, bar] = ["foo", "bar"]?
- 24. polimorfismo C++ ((X *) y) -> foo() vs ((X) * y) .foo()
- 25. ¿Hay alguna diferencia entre "foo is None" y "foo == None"?
- 26. ¿Cuándo os.environ ['foo'] no coincide con os.getenv ('foo')?
- 27. Absoluto ("/ foo") y relativo ("../foo") nombres de archivo. ¿Cómo se llama la categoría "foo"?
- 28. R: apt-get install r-cran-foo vs. install.packages ("foo")
- 29. jQuery 1.4.2 - es $ ("# foo"). Hide ("normal") roto o ¿estoy loco?
- 30. Scala: 'foo def = {1}' vs 'foo def {1}'
Ahh aquí hay un sub-pregunta para usted entonces Jandy - se '$ ('span: [id = foo]') 'solo a mano para' $ (span # foo) 'o un selector diferente en total? – HurnsMobile
@HurnsMobile: No, en absoluto. '$ ('span: [id = foo]')'. De hecho, recomendaría echarle un vistazo al código de jQuery init aquí. jQuery analiza algunas expresiones de selector a una llamada directa de 'getElementById' o' getElementsByTagName', creo que '$ (span # foo)' es una de esas. Por lo tanto, es definitivamente más rápido que '$ ('span: [id = foo]')'. Esa expresión entrará en Sizzle y obviamente lleva más tiempo que uno de los métodos mencionados anteriormente. – jAndy
Muy informativo, muchas gracias. La razón por la que estaba considerando usar algo además de $ ("# foo") para apuntar a una identificación es porque la identificación a la que apuntaba tenía un período, lo que obviamente es problemático ya que jQuery interpretaría esto como una identificación y una clase. Entonces, al usar $ ("[id = Address.State]"), por ejemplo, pude solucionar el problema. Otra forma de evitarlo es escaparse dos veces del período como en $ ("# Dirección \\. Estado"), pero pensé que el doble escape podría ser menos legible. Sin embargo, dada la pérdida de eficiencia que señaló, probablemente usaría eso de todos modos. – jbyrd