Несмотря на общепринятый консенсус, вы не можете использовать :nth-child
здесь, потому что он учитывает всех дочерних элементов, независимо от того, соответствуют они предыдущему селектору или нет. Только после он захватывает n-й элемент и сравнивает его с селектором, чтобы определить, соответствует ли он. Итак, это: ul li.hr:nth-child(5)
на самом деле рассматривается как ul li:nth-child(5).hr
. Это может показаться странным, но это строго соответствует спецификации CSS (см. jQuery-описание ).
К счастью, jQuery предоставляет замечательный псевдокласс :eq()
, который позволяет фильтровать по индексам, начинающимся с нуля, и учитывают предыдущий селектор ...
$("ul > li.hr:eq(4)").addClass("green");
Я даже проверил это, чтобы убедиться, что оно работает ...
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
.green { color:green; font-weight:bold; }
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$("ul > li.hr:eq(4)").addClass("green");
});
</script>
</head>
<body>
<ul>
<li class="a">foo</li>
<li class="b">foo</li>
<li class="hr">foo</li>
<li class="c">foo</li>
<li class="a">foo</li>
<li class="hr">foo</li>
<li class="a">foo</li>
<li class="b">foo</li>
<li class="hr">foo</li>
<li class="c">foo</li>
<li class="a">foo</li>
<li class="hr">foo</li>
<li class="a">foo</li>
<li class="b">foo</li>
<li class="hr">bar</li> <!-- 5th -->
<li class="c">foo</li>
<li class="a">foo</li>
<li class="hr">foo</li>
</ul>
</body>
</html>