Elemente über die Index-Reihenfolge selektieren

Problem

Sie wollen Elemente basierend auf ihre Reihenfolge selektieren.

Lösung

Abhängig davon, was Sie tun wollen, stehen Ihnen die folgenden Filter zur Verfügung. Sie sehen vielleicht wie CSS-Pseudoklassen aus, aber in jQuery heißen sie Filter:

:first
Passt auf das erste selektierte Element
:last
Passt auf das letzte selektierte Element
:even
Passt auf jedes gerade Element (der Index beginnt bei Null)
:odd
Passt auf jedes ungerade Element (der Index beginnt bei Null)
:eq(n)
Passt auf ein einzelnes Element mit dem Index (n)
:lt(n)
Passt auf alle Elemente mit einem Index kleiner n
:gt(n)
Passt auf alle Elemente mit einem Index größer n

Nutzen wir das folgende HTML-Markup:

<ol>
    <li>Erstes Element</li>
    <li>Zweites Element</li>
    <li>Drittes Element</li>
    <li>Viertes Element</li>
</ol>

Das erste Element könnten wir nun auf vielen verschiedenen Wegen selektieren:

jQuery('ol li:first');
jQuery('ol li:eq(0)');
jQuery('ol li:lt(1)');

Beachten Sie, dass sowohl der eq()- wie auch der lt()-Filter eine Zahl erwarten. Der Index beginnt mit 0, daher ist das erste Element über 0 zu erreichen, das zweite über 1 und so weiter.

Häufig will man für Tabellenzeilen abwechselnde Stile nutzen. Das kann man mit den Filtern :even und :odd erreichen:

<table>
    <tr><td>0</td><td>gerade</td></tr>
    <tr><td>1</td><td>ungerade</td></tr>
    <tr><td>2</td><td>gerade</td></tr>
    <tr><td>3</td><td>ungerade</td></tr>
    <tr><td>4</td><td>gerade</td></tr>
</table>

Sie können nun abhängig vom Index jeder Tabellenzeile unterschiedliche Klassen zuweisen:

jQuery('tr:even').addClass('even');

Dabei müssen Sie natürlich die entsprechende Klasse (even) in Ihrem CSS Stylesheet definieren:

table tr.even {
    background: #CCC;
}

Damit erhält man den in Figure 2-1 gezeigten Effekt.

Tabelle mit dunkleren »geraden« Zeilen
Figure 2-1. Tabelle mit dunkleren »geraden« Zeilen

Diskussion

Wie schon erwähnt beginnt der Index von Elementen mit der Null, so dass das erste Element den Index 0 besitzt. Abgesehen davon ist die Nutzung der beschriebenen Filter sehr einfach. Es sollte auch noch erwähnt werden, dass diese Filter eine Collection benötigen, mit der sie arbeiten können, denn der Index kann nur ermittelt werden, wenn es eine initiale Collection gibt. Dieser Selektor wird daher nicht funktionieren:

jQuery(':even');

Warning

Tatsächlich funktioniert dieser Selektor, aber nur, weil jQuery im Hintergrund noch korrigierend eingreift. Wird keine initiale Collection angegeben, geht jQuery davon aus, dass Sie alle Elemente im Dokument meinen. Der Selektor funktioniert also, indem er auf jQuery('*:even') abgebildet wird.


Auf der linken Seite des Filters ist eine initiale Collection notwendig, also etwas, auf das der Filter angewendet werden kann. Die Collection kann sich dabei in einem schon instanzierten jQuery-Objekt befinden, wie zum Beispiel hier:

jQuery('ul li').filter(':first');

Die Filter-Methode wird hier auf einem schon instanzierten jQuery-Objekte (mit den List-Elementen) ausgeführt.

JQuery Kochbuch
titlepage.xhtml
part0000.html
part0001.html
part0002_split_000.html
part0002_split_001.html
part0002_split_002.html
part0003_split_000.html
part0003_split_001.html
part0003_split_002.html
part0003_split_003.html
part0003_split_004.html
part0003_split_005.html
part0003_split_006.html
part0003_split_007.html
part0004_split_000.html
part0004_split_001.html
part0004_split_002.html
part0004_split_003.html
part0004_split_004.html
part0004_split_005.html
part0004_split_006.html
part0004_split_007.html
part0004_split_008.html
part0004_split_009.html
part0004_split_010.html
part0004_split_011.html
part0004_split_012.html
part0004_split_013.html
part0004_split_014.html
part0004_split_015.html
part0004_split_016.html
part0004_split_017.html
part0004_split_018.html
part0005_split_000.html
part0005_split_001.html
part0005_split_002.html
part0005_split_003.html
part0005_split_004.html
part0005_split_005.html
part0005_split_006.html
part0005_split_007.html
part0005_split_008.html
part0005_split_009.html
part0005_split_010.html
part0005_split_011.html
part0005_split_012.html
part0005_split_013.html
part0006_split_000.html
part0006_split_001.html
part0006_split_002.html
part0006_split_003.html
part0006_split_004.html
part0006_split_005.html
part0006_split_006.html
part0006_split_007.html
part0006_split_008.html
part0006_split_009.html
part0006_split_010.html
part0007_split_000.html
part0007_split_001.html
part0007_split_002.html
part0007_split_003.html
part0007_split_004.html
part0007_split_005.html
part0007_split_006.html
part0007_split_007.html
part0007_split_008.html
part0007_split_009.html
part0007_split_010.html
part0007_split_011.html
part0008_split_000.html
part0008_split_001.html
part0008_split_002.html
part0008_split_003.html
part0008_split_004.html
part0008_split_005.html
part0008_split_006.html
part0008_split_007.html
part0008_split_008.html
part0008_split_009.html
part0008_split_010.html
part0008_split_011.html
part0008_split_012.html
part0008_split_013.html
part0008_split_014.html
part0008_split_015.html
part0008_split_016.html
part0008_split_017.html
part0008_split_018.html
part0008_split_019.html
part0008_split_020.html
part0008_split_021.html
part0008_split_022.html
part0009_split_000.html
part0009_split_001.html
part0009_split_002.html
part0009_split_003.html
part0009_split_004.html
part0009_split_005.html
part0009_split_006.html
part0009_split_007.html
part0009_split_008.html
part0009_split_009.html
part0009_split_010.html
part0010_split_000.html
part0010_split_001.html
part0010_split_002.html
part0010_split_003.html
part0010_split_004.html
part0010_split_005.html
part0010_split_006.html
part0010_split_007.html
part0010_split_008.html
part0010_split_009.html
part0010_split_010.html
part0010_split_011.html
part0011_split_000.html
part0011_split_001.html
part0011_split_002.html
part0011_split_003.html
part0011_split_004.html
part0011_split_005.html
part0011_split_006.html
part0011_split_007.html
part0011_split_008.html
part0011_split_009.html
part0011_split_010.html
part0011_split_011.html
part0012_split_000.html
part0012_split_001.html
part0012_split_002.html
part0012_split_003.html
part0012_split_004.html
part0012_split_005.html
part0012_split_006.html
part0012_split_007.html
part0012_split_008.html
part0013_split_000.html
part0013_split_001.html
part0013_split_002.html
part0013_split_003.html
part0013_split_004.html
part0013_split_005.html
part0013_split_006.html
part0013_split_007.html
part0013_split_008.html
part0013_split_009.html
part0013_split_010.html
part0013_split_011.html
part0013_split_012.html
part0014_split_000.html
part0014_split_001.html
part0014_split_002.html
part0014_split_003.html
part0014_split_004.html
part0014_split_005.html
part0014_split_006.html
part0014_split_007.html
part0014_split_008.html
part0014_split_009.html
part0014_split_010.html
part0014_split_011.html
part0015_split_000.html
part0015_split_001.html
part0015_split_002.html
part0015_split_003.html
part0015_split_004.html
part0015_split_005.html
part0015_split_006.html
part0015_split_007.html
part0015_split_008.html
part0015_split_009.html
part0015_split_010.html
part0016_split_000.html
part0016_split_001.html
part0016_split_002.html
part0016_split_003.html
part0016_split_004.html
part0016_split_005.html
part0016_split_006.html
part0016_split_007.html
part0016_split_008.html
part0016_split_009.html
part0017_split_000.html
part0017_split_001.html
part0017_split_002.html
part0017_split_003.html
part0017_split_004.html
part0017_split_005.html
part0017_split_006.html
part0017_split_007.html
part0017_split_008.html
part0017_split_009.html
part0017_split_010.html
part0017_split_011.html
part0018_split_000.html
part0018_split_001.html
part0018_split_002.html
part0018_split_003.html
part0018_split_004.html
part0018_split_005.html
part0018_split_006.html
part0019_split_000.html
part0019_split_001.html
part0019_split_002.html
part0019_split_003.html
part0019_split_004.html
part0019_split_005.html
part0019_split_006.html
part0019_split_007.html
part0019_split_008.html
part0019_split_009.html
part0019_split_010.html
part0020_split_000.html
part0020_split_001.html
part0020_split_002.html
part0020_split_003.html
part0020_split_004.html
part0020_split_005.html
part0020_split_006.html
part0020_split_007.html
part0020_split_008.html
part0021_split_000.html
part0021_split_001.html
part0021_split_002.html
part0021_split_003.html
part0021_split_004.html
part0021_split_005.html
part0021_split_006.html
part0021_split_007.html
part0021_split_008.html
part0021_split_009.html
part0022.html
part0023.html
part0024.html
part0025.html