Es hat mich überrascht, dass Sizzle (die Selektor-Engine, die jQuery verwendet) verfügt über eine eingebaute :nth-child()
Selektor, aber es fehlt ein :nth-of-type()
Selektor.
Zur Veranschaulichung des Unterschieds zwischen :nth-child()
y :nth-of-type()
und um das Problem zu veranschaulichen, betrachten wir das folgende HTML-Dokument :
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>:nth-of-type() in Sizzle/jQuery?</title>
<style>
body p:nth-of-type(2n) { background: red; }
</style>
</head>
<body>
<p>The following CSS is applied to this document:</p>
<pre>body p:nth-of-type(2n) { background: red; }</pre>
<p>This is paragraph #1.</p>
<p>This is paragraph #2. (Should be matched.)</p>
<p>This is paragraph #3.</p>
<p>This is paragraph #4. (Should be matched.)</p>
<div>This is not a paragraph, but a <code>div</code>.</div>
<p>This is paragraph #5.</p>
<p>This is paragraph #6. (Should be matched.)</p>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script>
$(function() {
// The following should give every second paragraph (those that had red backgrounds already after the CSS was applied) an orange background.
// $('body p:nth-of-type(2n)').css('background', 'orange');
});
</script>
</body>
</html>
Da Sizzle die browser-native querySelector()
y querySelectorAll()
Methoden, wenn diese vorhanden sind (d. h. in Browsern, die bereits die Selektoren-API ), Dinge wie $('body p:nth-child');
wird natürlich funktionieren. Es wird jedoch nicht in älteren Browsern funktionieren, da Sizzle keine Fallback-Methode für diesen Selektor hat.
Ist es möglich, auf einfache Weise die :nth-of-type()
Selektor für Sizzle zu verwenden oder ihn in jQuery zu implementieren (indem man den eingebauten :nth-child()
Selektor vielleicht)? A benutzerdefinierter Selektor mit Parametern wäre schön.