Vereinfachen jQuery Selector
Frage
Ich habe einen Selektor „td > a.leftmenuitem:last, div > a.leftmenuitem:last
“, und ich möchte es ein wenig vereinfachen. Ich habe versucht, „* > a.leftmenuitem:last
“, „td, div > a.leftmenuitem:last
“ und „(td, div) > a.leftmenuitem:last
“, von denen keiner die erste Auswahl funktioniert die Art und Weise arbeiten. Ist diese Art der Sache einfach nicht möglich, in der Auswahl Syntax ohne eine separate Auswahl für jeden zu machen?
Lösung
Sie können nicht vereinfachen:
td > a.leftmenuitem:last, div > a.leftmenuitem:last
, ohne dass es etwas gemeinsam zu sein, so dass Sie alle relevanten td und div-Elemente mit einem Ausdruck auswählen können. Zum Beispiel, wenn sie beide Klasse bla haben, können Sie tun:
.blah > a.leftmenuitem:last
Aber nicht diese Art von Ausdruck verwenden, wenn Sie es vermeiden können. Klasse Selektoren langsam ist (im Vergleich zu ID und Tag-Selektoren).
Gibt es etwas falsch mit nur?
a.leftmenuitem:last
By the way, sind Sie sicher, :last
ist die richtige Wahl? Viele Leute verwenden es fälschlicherweise, es für :last-child
zu verkennen. :last
wird nur ein Element entsprechen, das letzte Element Matching auf der Seite.
Andere Tipps
Was ist größer, manchmal ist schneller. Wenn Sie * anstelle von td , Ihre Abfrage ist viel langsamer.
Ich glaube nicht, dass Sie es vereinfachen können. Ich würde stattdessen entscheiden sich auf die Links geben Sie in einer einzigartigen Klasse interessiert sind, so dass man einfach "a.<my-unique-class>:last"
tun können. Auf diese Weise jquery einfach scannen alle passenden <a>
-Tags, ohne sich Gedanken über ihre Eltern ein <td>
Element zu sein.
Ihre Wähler ist einfach genug. Wenn Sie es vereinfachen wollen, könnten Sie so etwas wie tun:
$('a.leftmenuitem:last').parent().doWhateverYouWereGoingToDo();
Ich bezweifle, dass dies zu einer schnelleren Ausführungszeiten führen würde, jedoch.
Vielleicht bin ich nur verwirrt, aber wenn
* > a.leftmenuitem:last
für Sie arbeiten würde, dann warum nicht mit
a.leftmenuitem:last
statt?
Der Selektor Sie verwenden ist
Parent > Child
alle Elemente Kind durch Child
von Elementen durch Parent
angegeben angegebenen übereinstimmen. Es sei denn, Sie <a>
Elemente an anderer Stelle in der Seite verwenden, die keine Kinder von <div>
und <td>
Elemente sind, warum nicht nur verwenden
$('a.leftmenuitem:last')
Bin ich etwas fehlt?