En jQuery, le sélecteur $ ('[id = foo]') est-il moins efficace que $ ('# foo')?
Répondre
courte et facile: OUI!
longue histoire (toujours pas fait)
$('[id=foo]')
utilise Sizzle (css moteur de recherche) pour sélectionner l'élément alors que
$('#foo')
appelle directement
getElementById
.
Pour avoir une histoire très longue, on y va: $('[id=foo]')
est synonyme de $('*:[id=foo]')
qui utilise le sélecteur universel. Cela signifie qu'il interroge TOUS les nœuds dans votre balisage, puis regarde lequel de ceux-ci a le id === foo
(qui, espérons-le, ne correspondra qu'à un seul élément, IDs = unique). Cela, bien sûr, est coûteux, assez coûteux. Et c'est pourquoi vous ne devriez jamais écrire un tel sélecteur! Toujours pleinement qualifier ceci si possible, comme $('span:[id=foo]')
ouais ,.
Le sélecteur le plus rapide jQuery est le sélecteur d'ID $ ('# foo') car elle correspond directement à une méthode JavaScript natif, getElementById()
- 1. var foo = foo || alerte (foo);
- 2. Que fait exactement "foo = (foo + 1)% bar"?
- 3. Foo f = Foo(); // aucune fonction correspondante pour l'appel à 'Foo :: Foo (Foo)' ... hein?
- 4. Quelle est la différence entre IFoo foo = new Foo() et Foo foo = new Foo()
- 5. jquery ("foo bar") vs jquery ("foo"). Find ("bar")
- 6. Est-ce que jQuery ('.foo'). Find ('. Bar') est équivalent à jQuery ('.bar', jQuery ('.foo'))?
- 7. Quel type de tableau est Foo() en tant que Foo()?
- 8. jQuery $ .Chaque (arr, foo) par rapport à $ (arr) .Chaque (foo)
- 9. Que fait "#define FOO (template)"?
- 10. Que fait l'objet * foo (bar)?
- 11. Pourquoi, dans Ruby, Array ("foo \ nbar") == ["foo \ n", "bar"]?
- 12. Comment écrire OnClick = "return Foo()" dans jquery
- 13. Que signifie "local -a foo" dans zsh?
- 14. Que signifie $$ ('foo') dans le code source JavaScript?
- 15. Sélecteur CSS pour "foo qui contient une barre"?
- 16. Ruby's "foo = true if! Defined? Foo || foo.nil?" ne fonctionne pas
- 17. R: apt-get installer r-cran-foo vs install.packages ("foo")
- 18. Différence entre "struct foo *" et "foo *" où foo est une struct?
- 19. Comment écrire "WHERE foo = 'bar' OU foo = 'baz' OU ..." sans répéter "foo" chaque fois
- 20. Que signifie (myVar && foo()) en JavaScript?
- 21. Différence entre 'var foo = fonction ...' et 'function foo() ...'
- 22. Différence entre if (x) {foo(); } et x? foo(): 0;
- 23. $ _GET sans foo
- 24. Comment réécrire/foo à index.php? X = foo mais aussi/foo/bar à index.php? X = foo & bar = true dans une seule RewriteRule?
- 25. Dans ASP.NET, quelles conditions provoqueraient l'échec de OnServerClick = "foo", de sorte que "foo()" ne soit jamais appelé?
- 26. Que signifie "foo" dans cette requête SQL Server?
- 27. Qu'est-ce que Python équivaut à ou équivaut à expression, pour obtenir le retour de foo ou foo = 'bar' fonctionnant?
- 28. foo.split (','). Length! = Nombre de ',' trouvé dans 'foo'?
- 29. contrôleur de route Foo/{action}
- 30. Javascript get nextSibling pas la classe "foo"
Ahh Heres une sous-question pour vous, alors Jandy - est '$ ('span: [id = foo]') 'juste longhand pour' $ (span # foo) 'ou un autre sélecteur? – HurnsMobile
@HurnsMobile: Pas du tout. '$ ('span: [id = foo]')'. Je recommanderais de jeter un coup d'oeil sur le code init de jQuery ici. jQuery analyse certaines expressions de sélecteur pour un appel direct de 'getElementById' ou' getElementsByTagName', je pense '$ (span # foo)' en fait partie. Donc c'est définitivement plus rapide que $ ('span: [id = foo]') '. Cette expression ira dans Sizzle et cela prend évidemment plus de temps que l'une des méthodes mentionnées ci-dessus. – jAndy
Très instructif, merci beaucoup. La raison pour laquelle je pensais utiliser quelque chose en plus de $ ("# foo") pour cibler un identifiant est que l'identifiant que je ciblais avait un point, ce qui est évidemment problématique car jQuery l'interpréterait comme un identifiant et une classe. Donc, en utilisant $ ("[id = Address.State]"), par exemple, je pourrais contourner le problème. Une autre façon de contourner le problème est de doubler la période comme dans $ ("# Address \\. State"), mais je pensais que le double échappement pourrait être moins lisible. Cependant, compte tenu de la perte d'efficacité que vous avez signalée, je l'utiliserais probablement de toute façon. – jbyrd