2009-07-30 9 views
0

J'ai un sélecteur, "td > a.leftmenuitem:last, div > a.leftmenuitem:last", et je voudrais le simplifier un peu. J'ai essayé "* > a.leftmenuitem:last", "td, div > a.leftmenuitem:last", et "(td, div) > a.leftmenuitem:last", dont aucun ne fonctionne comme le premier sélecteur. Est-ce que ce genre de chose n'est tout simplement pas possible dans la syntaxe du sélecteur sans faire un sélecteur séparé pour chacun?Simplifier jQuery Selector

Répondre

2

Vous ne pouvez pas simplifier:

td > a.leftmenuitem:last, div > a.leftmenuitem:last 

sans qu'il y ait quelque chose en commun de sorte que vous pouvez sélectionner tous les éléments pertinents td et div avec une expression. Par exemple, s'ils avaient tous deux bla classe que vous pourriez faire:

.blah > a.leftmenuitem:last 

Mais ne pas utiliser ce genre d'expression si vous pouvez l'éviter. Les sélecteurs de classe sont lents (comparés aux sélecteurs ID et Tag).

Y a-t-il quelque chose qui ne va pas?

a.leftmenuitem:last 

? Au fait, êtes-vous certain que :last est le bon choix? Beaucoup de gens l'utilisent par erreur, le confondant avec :last-child. :last ne correspond qu'à un élément, le dernier élément correspondant trouvé sur la page.

+0

Ah oui! Bien sûr: le dernier-enfant fonctionne parfaitement. Je me demandais pourquoi juste en utilisant a.leftmenuitem: le dernier ne fonctionnait pas. Merci! – DLH

1

Ce qui est plus gros est parfois plus rapide. Lorsque vous utilisez * au lieu de td, votre requête est beaucoup plus lente.

0

Je ne pense pas que vous pouvez le simplifier. J'opterais plutôt pour donner les liens qui vous intéressent dans une classe unique, de sorte que vous pouvez simplement faire "a.<my-unique-class>:last". De cette façon, jquery peut simplement scanner toutes les balises <a> sans se préoccuper de savoir si leur parent est un élément <td>.

0

Votre sélecteur est assez simple. Si vous vouliez simplifier, vous pouvez faire quelque chose comme:

$('a.leftmenuitem:last').parent().doWhateverYouWereGoingToDo(); 

Je doute que cela raccourcira les temps d'exécution, cependant.

0

Peut-être que je ne suis confus, mais si

* > a.leftmenuitem:last 

travaillerait pour vous, alors pourquoi ne pas aller avec

a.leftmenuitem:last 

à la place?

0

Le sélecteur que vous utilisez est

Parent > Child 

rechercher tous les éléments enfants spécifiés par Child des éléments spécifiés par Parent. À moins que vous utilisez <a> éléments ailleurs dans la page qui ne sont pas des enfants de <div> et <td> éléments, pourquoi ne pas utiliser

$('a.leftmenuitem:last') 

Est-ce que je manque quelque chose?