Selector jQuery Simplifique
Pergunta
Eu tenho um seletor, "td > a.leftmenuitem:last, div > a.leftmenuitem:last
", e eu gostaria de simplificá-lo um pouco. Eu tentei "* > a.leftmenuitem:last
", "td, div > a.leftmenuitem:last
", e "(td, div) > a.leftmenuitem:last
", nenhum dos quais funcionam da maneira que o primeiro selector faz. É este tipo de coisa simplesmente não é possível na sintaxe selector sem fazer um seletor separado para cada um?
Solução
Você não pode simplificar:
td > a.leftmenuitem:last, div > a.leftmenuitem:last
sem que haja algo em comum para que você pode selecionar todos os elementos td e div relevantes com uma expressão. Por exemplo, se ambos tinham classe blá você poderia fazer:
.blah > a.leftmenuitem:last
Mas não use esse tipo de expressão, se você pode evitá-lo. seletores de classe são lentos (em comparação com ID e tag seletores).
Existe errado algo com apenas?
a.leftmenuitem:last
?
A propósito, você está certo :last
é a escolha correta? Muitas pessoas erroneamente usá-lo, confundindo-a com :last-child
. :last
só irá corresponder a um elemento, o último elemento correspondente encontrado na página.
Outras dicas
O que é maior, às vezes é mais rápido. Quando você usa * em vez de td , sua consulta é muito mais lento.
Eu não acho que você pode simplificá-lo. I tinha em vez opt no sentido de dar os links que você está interessado em uma classe única, de modo que você pode simplesmente fazer "a.<my-unique-class>:last"
. Dessa forma, jQuery pode simplesmente varrer todas as tags <a>
correspondência sem se preocupar com o seu pai ser um elemento <td>
.
O seletor é bastante simples. Se você quisesse simplificá-lo, você poderia fazer algo como:
$('a.leftmenuitem:last').parent().doWhateverYouWereGoingToDo();
Eu duvido que isso resultaria em tempos de execução mais rápidos, no entanto.
Talvez eu esteja apenas confuso, mas se
* > a.leftmenuitem:last
iria trabalhar para você, então porque não ir com
a.leftmenuitem:last
em vez disso?
O seletor que você está usando é
Parent > Child
coincidir com todos os elementos filho especificados por Child
de elementos especificados pelo Parent
. A menos que você estiver usando elementos <a>
em outras partes da página que não são filhos de <div>
e <td>
elementos, por que não usar
$('a.leftmenuitem:last')
Estou faltando alguma coisa?