2009-07-16 4 views
15

Ich habe eine Tabelle mit mehr als 9 Zeilen.Verkettung jQuery Selektoren: lt und: GT

Wenn ich das tue: $('table tr:gt(3):lt(6)'), soll ich am Ende 3 oder 6 Elemente erhalten, und warum? Werden alle Selektoren auf dieselbe primäre Auswahl angewendet oder werden sie nacheinander auf verschiedene Auswahlen angewendet?

Antwort

28

Sie sind nacheinander aufgetragen, so werden Sie zunächst die ersten vier Elemente (:gt(3)) Filter entfernt, dann filtern Sie alle Elemente nach dem sechsten (:lt(6)) Elemente des bereits gefilterten Satzes entfernt.

HTML Stellen Sie sich vor:

<br/><br/> 
<br/><br/> 
<br/><br/> 
<br/><br/> 
<br/><br/> 
<br/><br/> 

Dann gehen Sie wie folgt jQuery:

$('br:gt(3):lt(6)').addClass('sel'); 

Sie haben jetzt:

<br/><br/> 
<br/><br/> 
<br class="sel"/><br class="sel"/> 
<br class="sel"/><br class="sel"/> 
<br class="sel"/><br class="sel"/> 
<br/><br/> 
+5

Beachten Sie, dass die ': lt (n)' und ': lt (n)' - Selektoren 0-indiziert und nicht enthalten sind. – Blixt

+0

Ordentlich notiert, danke. – glmxndr

+0

danke, sehr hilfreich! – GianFS

1

Aus irgendeinem Grund :lt(6) wird in dieser Auswahl ignoriert , so wird es alles, was größer als 3 ist, in dieser Intsance zurückgeben.

jedoch, wenn man es über wechseln, wird es als

$('table tr:lt(6):gt(3)') 

2 Reihen zurückkehren wird erwartet arbeiten (nur 4 Zeilen und 5 liegt zwischen 6 und 3).

** edit: ** v.1.3.2 mit

Und auch wird lt(6) nicht außer Acht gelassen, nicht nur arbeiten, wie ich es erwartet hatte. So :gt(3):lt(6) wird tatsächlich 6 Elemente zurückgeben (wenn Sie genug Zeilen haben, ist)

+0

Hat auf der Probe, die ich ausprobiert habe, nicht so funktioniert. Welche Version von jQuery verwenden Sie? – tvanfosson

+1

Nicht wahr, ': lt (6)' wird angewendet, Sie haben es einfach nicht gesehen, weil ': gt (3)' mehr als 6 Elemente zurückgegeben hat.Es wird jedoch funktionieren, wie Sie gesagt haben, wenn Sie sie wechseln. – Blixt

+0

aha! so filtert es alles größer als 3, dann gibt es einen neuen Filter auf was auch immer davon empfangen wird ... nett. – peirix

24

Ich schlage vor, dass Sie stattdessen die Slice() -Methode verwenden.

http://docs.jquery.com/Traversing/slice#startend

$('table tr').slice(2, 5).addClass("something"); 
+1

Beantwortet die Frage nicht, aber ist eine klarere Art, die Auswahl zu treffen. – tvanfosson

+0

Ich kann mir keinen Grund vorstellen, warum du lt und gt auf diese Art ketten würdest, also wird vielleicht subtenante das nützlich finden. – ScottE

+0

Ja, das ist wirklich nützlich, obwohl es die Frage nur teilweise beantwortet. +1 obwohl :) – glmxndr

3

Nicht ganz das, was könnten Sie

Working Demo

Grundsätzlich Think-, der zweite Filter nacheinander aufgetragen, auf den aufeinander abgestimmten Satz des ersten Filters.

Zum Beispiel wird bei einer Tabelle mit 10 Zeilen :gt(3) nach Elementen 5 - 10 gefiltert, dann wird :lt(6) auf die 6 Elemente angewendet, keine Filterung.

wenn Sie bearbeiten/ zur Demo URL hinzufügen, können Sie mit dem Wahl spielen und sehen Sie selbst. Wenn Sie den zweiten Filter in :lt(2) ändern, werden die Zeilen 5 und 6 rot hervorgehoben