Simplificar el Selector de jQuery
Pregunta
Tengo un selector, "td > a.leftmenuitem:last, div > a.leftmenuitem:last
"y me gustaría simplificar un poco.He probado "* > a.leftmenuitem:last
", "td, div > a.leftmenuitem:last
", y "(td, div) > a.leftmenuitem:last
"ninguno de los cuales funcionan de la forma en el primer selector hace.Es este tipo de cosas no es posible en el selector de sintaxis sin hacer un aparte selector para cada uno de ellos?
Solución
No puedes simplificar:
td > a.leftmenuitem:last, div > a.leftmenuitem:last
sin que haya algo en común para que pueda seleccionar todos los elementos td y div relevantes con una sola expresión. Por ejemplo, si ambos tuvieran clase bla, podrías hacer:
.blah > a.leftmenuitem:last
Pero no use este tipo de expresión si puede evitarlo. Los selectores de clase son lentos (en comparación con los identificadores de ID y etiqueta).
¿Hay algo mal con solo?
a.leftmenuitem:last
?
Por cierto, ¿estás seguro de que :last
es la opción correcta? Mucha gente lo usa por error, confundiéndolo con :last-child
. <=> solo coincidirá con un elemento, el último elemento coincidente encontrado en la página.
Otros consejos
Lo que es más grande, a veces es más rápido. Cuando usa * en lugar de td , su consulta es mucho más lenta.
No creo que puedas simplificarlo. En su lugar, optaría por dar los enlaces que le interesan en una clase única, para que pueda simplemente hacer "a.<my-unique-class>:last"
. De esta forma, jquery simplemente puede escanear todas las etiquetas <a>
coincidentes sin preocuparse de que su padre sea un elemento <td>
.
Su selector es lo suficientemente simple. Si desea simplificarlo, puede hacer algo como:
$('a.leftmenuitem:last').parent().doWhateverYouWereGoingToDo();
Dudo que esto resulte en tiempos de ejecución más rápidos, sin embargo.
Tal vez solo estoy confundido, pero si
* > a.leftmenuitem:last
funcionaría para usted, entonces ¿por qué no ir con
?a.leftmenuitem:last
en su lugar?
El selector de que estás usando
Parent > Child
partido de todos los elementos secundarios especificado por Child
de los elementos especificados por Parent
.A menos que usted está utilizando <a>
elementos en cualquier lugar de la página que no son hijos de <div>
y <td>
elementos, ¿por qué no usar simplemente
$('a.leftmenuitem:last')
Me estoy perdiendo algo?