2009-07-30 18 views
0

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

2

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.

+0

Ah ja! Natürlich: Last-Kind funktioniert perfekt. Ich habe mich gefragt, warum nur a.leftmenuitem: zuletzt nicht funktioniert hat. Vielen Dank! – DLH

1

Was ist größer, manchmal ist schneller. Wenn Sie * anstelle von td verwenden, ist Ihre Abfrage viel langsamer.

0

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.

0

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.

0

Vielleicht nur verwirrt ich bin, aber wenn

* > a.leftmenuitem:last 

für Sie arbeiten würde, dann warum nicht mit

a.leftmenuitem:last 

statt?

0

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

verwenden
$('a.leftmenuitem:last') 

Bin ich etwas fehlt?