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 so arbeitet, wie der erste Selektor tut. Ist das in der Selector-Syntax einfach nicht möglich, ohne für jeden einen eigenen Selektor zu erstellen?Vereinfachen Sie jQuery Selector
Antwort
Sie können nicht vereinfachen:
td > a.leftmenuitem:last, div > a.leftmenuitem:last
ohne etwas gemeinsam dort zu sein, so dass Sie alle relevanten td und div-Elemente mit einem Ausdruck auswählen können. Zum Beispiel, wenn sie beiden Klasse bla haben, können Sie tun:
.blah > a.leftmenuitem:last
Aber nicht diese Art von Ausdruck verwenden, wenn Sie es vermeiden können. Klassenselektoren sind langsam (im Vergleich zu ID- und Tag-Selektoren).
Gibt es etwas falsch mit nur?
a.leftmenuitem:last
?
Übrigens, sind Sie sicher, :last
ist die richtige Wahl? Viele Leute benutzen es irrtümlicherweise für :last-child
. :last
entspricht nur einem Element, dem letzten übereinstimmenden Element auf der Seite.
Was ist größer, manchmal ist schneller. Wenn Sie * anstelle von td verwenden, ist Ihre Abfrage viel langsamer.
Ich glaube nicht, dass Sie es vereinfachen können. Ich würde stattdessen entscheiden, die Links, die Sie interessieren, eine einzigartige Klasse zu geben, so dass Sie einfach "a.<my-unique-class>:last"
tun können. Auf diese Weise kann jQuery einfach alle passenden <a>
Tags scannen, ohne sich darum sorgen zu müssen, dass ihr Elternteil ein <td>
Element ist.
Ihr Wahlschalter ist einfach genug. Wenn Sie es vereinfachen wollen, könnten Sie so etwas wie:
$('a.leftmenuitem:last').parent().doWhateverYouWereGoingToDo();
Ich bezweifle, dass dies zu einer schnelleren Ausführungszeiten führen würde, jedoch.
Vielleicht nur verwirrt ich bin, 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
match all Kind durch Child
von Elementen angegebenen Elemente durch Parent
angegeben. 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
$('a.leftmenuitem:last')
Bin ich etwas fehlt?
Ah ja! Natürlich: Last-Kind funktioniert perfekt. Ich habe mich gefragt, warum nur a.leftmenuitem: zuletzt nicht funktioniert hat. Vielen Dank! – DLH