Semplifica il selettore jQuery
Domanda
Ho un selettore, " td > a.leftmenuitem:last, div > a.leftmenuitem:last
" ;, e vorrei semplificarlo un po '. Ho provato & Quot; * > a.leftmenuitem:last
& Quot ;, & Quot; td, div > a.leftmenuitem:last
& Quot ;, e & Quot; (td, div) > a.leftmenuitem:last
& Quot ;, nessuna delle quali funziona come fa il primo selettore. Questo genere di cose non è semplicemente possibile nella sintassi del selettore senza creare un selettore separato per ciascuno?
Soluzione
Non puoi semplificare:
td > a.leftmenuitem:last, div > a.leftmenuitem:last
senza che ci sia qualcosa in comune in modo da poter selezionare tutti gli elementi td e div rilevanti con una sola espressione. Ad esempio, se entrambi avessero classe blah, potresti farlo:
.blah > a.leftmenuitem:last
Ma non usare questo tipo di espressione se puoi evitarlo. I selettori di classe sono lenti (rispetto ai selettori ID e tag).
C'è qualcosa che non va solo?
a.leftmenuitem:last
A proposito, sei sicuro che :last
sia la scelta corretta? Molte persone lo usano erroneamente, scambiandolo per :last-child
. <=> corrisponderà a un solo elemento, l'ultimo elemento corrispondente trovato nella pagina.
Altri suggerimenti
Ciò che è più grande, a volte è più veloce. Quando usi * invece di td , la tua query è molto più lenta.
Non credo che tu possa semplificarlo. Preferirei invece fornire i link che ti interessano in una classe unica, in modo che tu possa semplicemente fare "a.<my-unique-class>:last"
. In questo modo jquery può semplicemente scansionare tutti i tag <a>
corrispondenti senza preoccuparsi che il loro genitore sia un elemento <td>
.
Il tuo selettore è abbastanza semplice. Se volessi semplificarlo, potresti fare qualcosa del tipo:
$('a.leftmenuitem:last').parent().doWhateverYouWereGoingToDo();
Dubito che ciò comporterebbe tempi di esecuzione più rapidi, tuttavia.
Forse sono solo confuso, ma se
* > a.leftmenuitem:last
funzionerebbe per te, quindi perché non andare con
a.leftmenuitem:last
, invece?
Il selettore che stai utilizzando è
Parent > Child
corrisponde a tutti gli elementi figlio specificati da Child
degli elementi specificati da Parent
. A meno che tu non stia utilizzando <a>
elementi altrove nella pagina che non sono figli di <div>
e <td>
elementi, perché non usare semplicemente
$('a.leftmenuitem:last')
Mi manca qualcosa?