Меня удивило, что Sizzle (движок селектора, который использует jQuery) поставляется со встроенным селектором :nth-child()
, но не имеет селектора :nth-of-type()
.
Чтобы проиллюстрировать разницу между :nth-child()
и :nth-of-type()
и проиллюстрировать проблему, рассмотрим следующий HTML-документ :
<code><!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; }
Это абзац №1.
Это пункт № 2. (Должно совпадать.)
Это абзац № 3.
Это пункт № 4. (Должно совпадать.)
Это не абзац, а div
.
Это абзац № 5.
Это пункт № 6. (Должно совпадать.)
$ (function () {
// Следующее должно дать каждому второму абзацу (те, которые имели красный фон уже после применения CSS) оранжевый фон.
// $ ('body p: nth-of-type (2n)'). css ('background', 'orange');
});
Поскольку Sizzle использует встроенные в браузер методы querySelector()
и querySelectorAll()
, если они есть (т.е. в браузерах, которые уже реализуют API селекторов ), такие вещи, как $('body p:nth-child');
, конечно, будут работать. Он не будет работать в старых браузерах, потому что у Sizzle нет альтернативного метода для этого селектора.
Можно ли легко добавить селектор :nth-of-type()
в Sizzle или внедрить его в jQuery (возможно, с помощью встроенного селектора :nth-child()
)? пользовательский селектор с параметрами был бы хорош.