:nth-child(index/even/odd/equation)

如果某个元素是父元素中的第 n 个子元素,那么他就会被选中。

由于 jQuery 中的 :nth-child(n) 是严格按照 CSS 规范设计的,所以这里 n 的数值是从 1 开始计数的。然而,所有其他的选择器表达式中,jQuery 遵从的是 JavaScript 以 0 开始计数的规范。因此,如果一个 <ul> 含有两个 <li> ,那么 $('li:nth-child(1)') 选中的会是第一个 <li>$('li:eq(1)') 选中的则是第二个。

:nth-child(n) 伪类很容易跟 :eq(n) 混淆起来,然而两者匹配元素有着很大的差异。 用 :nth-child(n) 时,不论子元素是何种元素,他们都会被计数,而最终被选中的,只有与这个伪类前面的选择器相匹配的元素。如果用 :eq(n) 时,只有与这个伪类前面的选择相匹配的元素才会被计数,而不管他们是否是哪个元素的子元素,并且最终选中的是第 n+1 个元素(因为是从 0 开始计数的)。

关于这个不寻常的用法的深入探讨,可以在 W3C CSS 规范 中找到。

示例:

查找每个匹配的 ul 中第二个 li,并标记出来。

<!DOCTYPE html>
<html>
<head>
<style>

  div { float:left; }
  span { color:blue; }
  </style>
<script src="jquery.min.js"></script>
</head>
<body>

<div><ul>
    <li>John</li>
    <li>Karl</li>
    <li>Brandon</li>

  </ul></div>
  <div><ul>
    <li>Sam</li>
  </ul></div>

  <div><ul>
    <li>Glen</li>
    <li>Tane</li>
    <li>Ralph</li>

    <li>David</li>
  </ul></div>

<script>

$("ul li:nth-child(2)").append("<span> - 2nd!</span>");

</script>
</body>
</html>
演示:

示例:

这是例子展示了两个容易混淆的选择器是如何工作的。注意这里的 :even 和 :odd 会无视他们的父元素,而仅仅把元素列表中的元素一个隔一个的过滤出来。而 :nth-child 则会计算子元素在各自父元素中的索引值。很多时候,直接看例子会比空讲容易理解的多...

<!DOCTYPE html>
<html>
<head>
<style>
  button { display:block; font-size:12px; width:100px; }
  div { float:left; margin:10px; font-size:10px; 
        border:1px solid black; }
  span { color:blue; font-size:18px; }
  #inner { color:red; }
  td { width:50px; text-align:center; }
  </style>
<script src="jquery.min.js"></script>
</head>
<body>

<div>
    <button>:nth-child(even)</button>
    <button>:nth-child(odd)</button>
    <button>:nth-child(3n)</button>

    <button>:nth-child(2)</button>
  </div>
  <div>
    <button>:nth-child(3n+1)</button>
    <button>:nth-child(3n+2)</button>

    <button>:even</button>
    <button>:odd</button>
  </div>
  <div><table>

    <tr><td>John</td></tr>
    <tr><td>Karl</td></tr>
    <tr><td>Brandon</td></tr>

    <tr><td>Benjamin</td></tr>
  </table></div>
  <div><table>
    <tr><td>Sam</td></tr>

  </table></div>
  <div><table>
    <tr><td>Glen</td></tr>
    <tr><td>Tane</td></tr>

    <tr><td>Ralph</td></tr>
    <tr><td>David</td></tr>
    <tr><td>Mike</td></tr>

    <tr><td>Dan</td></tr>
  </table></div>
  <span>
    tr<span id="inner"></span>

  </span>

<script>


    $("button").click(function () {
      var str = $(this).text();
      $("tr").css("background", "white");
      $("tr" + str).css("background", "#ff0000");
      $("#inner").text(str);
    });



</script>
</body>
</html>
演示: