Simplifier le sélecteur jQuery
Question
J'ai un sélecteur, & "; td > a.leftmenuitem:last, div > a.leftmenuitem:last
&" et j'aimerais le simplifier un peu. J'ai essayé & "; * > a.leftmenuitem:last
&"; & "; td, div > a.leftmenuitem:last
&" Et & "; (td, div) > a.leftmenuitem:last
&"; Aucun fonctionne comme le premier sélecteur. Est-ce que ce genre de chose est tout simplement impossible dans la syntaxe du sélecteur sans créer un sélecteur distinct pour chacun?
La solution
Vous ne pouvez pas simplifier:
td > a.leftmenuitem:last, div > a.leftmenuitem:last
sans qu'il y ait quelque chose en commun, vous pouvez donc sélectionner tous les éléments td et div pertinents avec une seule expression. Par exemple, si les deux avaient la classe blah, vous pouvez faire:
.blah > a.leftmenuitem:last
Mais n'utilisez pas ce type d'expression si vous pouvez l'éviter. Les sélecteurs de classe sont lents (comparés aux sélecteurs ID et tag).
Quelque chose ne va pas avec juste?
a.leftmenuitem:last
?
Au fait, êtes-vous certain que :last
est le bon choix? Beaucoup de gens l'utilisent à tort, en le prenant pour :last-child
. <=> ne fera correspondre qu'un seul élément, le dernier élément correspondant trouvé sur la page.
Autres conseils
Ce qui est plus gros est parfois plus rapide. Lorsque vous utilisez * au lieu de td , votre requête est beaucoup plus lente.
Je ne pense pas que vous puissiez le simplifier. Je préférerais plutôt donner aux liens qui vous intéressent une classe unique, afin que vous puissiez simplement faire "a.<my-unique-class>:last"
. De cette façon, jQuery peut simplement analyser toutes les balises <a>
correspondantes sans s’inquiéter du fait que leur parent soit un <td>
élément.
Votre sélecteur est assez simple. Si vous voulez le simplifier, vous pouvez faire quelque chose comme:
$('a.leftmenuitem:last').parent().doWhateverYouWereGoingToDo();
Cependant, je doute que cela se traduise par des temps d'exécution plus rapides.
Peut-être que je suis juste confus, mais si
* > a.leftmenuitem:last
travaillerait pour vous, alors pourquoi ne pas aller avec
a.leftmenuitem:last
à la place?
Le sélecteur que vous utilisez est
Parent > Child
correspond à tous les éléments enfants spécifiés par Child
des éléments spécifiés par Parent
. Sauf si vous utilisez <a>
des éléments ailleurs dans la page qui ne sont pas des enfants des éléments <div>
et <td>
, pourquoi ne pas utiliser simplement
$('a.leftmenuitem:last')
Est-ce que je manque quelque chose?