您的浏览器过于古老 & 陈旧。为了更好的访问体验, 请 升级你的浏览器
Ready 发布于2014年08月17日 05:49

原创 jQuery 选择器(:nth-child(n))详解

9128 次浏览 读完需要≈ 8 分钟

内容目录

jQuery的:nth-child(n)选择器用于匹配作为父元素下的第n个(或特定顺序的)子元素的元素,将其封装为jQuery对象并返回。

与该选择器相对的是:nth-last-child(n)选择器,用于匹配作为父元素下的倒数第n个(或符合特定倒数顺序的)子元素。

注意:nth-child(n)选择器与:eq(index)选择器的不同之处在于:
:eq(index)选择器只匹配一个元素,并且是所有匹配到的元素中的第index + 1个元素(索引index从0开始算起);
:nth-child(n)选择器则需要判断匹配到的元素是否是其父元素的第n个子元素或符合其他特定要求(序号n从1开始算起),如果是就保留,否则将被舍弃。

语法

jQuery1.1.4 新增该选择器。

// 这里的selector表示具体的选择器
// 这里的n表示具体的序号或者符合要求的表达式
jQuery( "selector:nth-child(n)" )

参数

参数 描述
selector 一个有效的选择器。
n 指定的序号,从1开始计数。

参数n一般是一个自然数,表示作为父元素下的第n个子元素。例如::nth-child(2)表示作为父元素的第2个子元素。

参数n也可以为特定的表达式(表达式中只能使用字母n表示自然数,大小写均可)。例如:

  • :nth-child(odd)表示匹配作为父元素的奇数(第1、3、5、7……个)子元素的元素;
  • :nth-child(even)表示匹配作为父元素的偶数(第2、4、6、8……个)子元素的元素;
  • :nth-child(3n)表示匹配作为父元素的第3n个子元素的元素(n表示包括0在内的自然数,下同);
  • :nth-child(3n+1)表示匹配作为父元素的第3n+1个子元素的元素;
  • :nth-child(3n+2)表示匹配作为父元素的第3n+2个子元素的元素;

返回值

返回封装了匹配到的元素的jQuery对象。

如果找不到任何相应的匹配,则返回一个空的jQuery对象。

jQuery先会根据选择器selector去查找所有匹配的元素,再看它们是否是父元素的符合指定顺序的子元素,如果是就保留,否则舍弃掉该元素。

示例&说明

以下面这段HTML代码为例:

<div id="n1">
	<div id="n2">
		<ul id="n3">
			<li id="n4" class="c">item1</li>
			<li id="n5">item2</li>
			<li id="n6" class="c">item3</li>
		</ul>
	</div>
	<div id="n7">
		<ul id="n8">
			<li id="n9">item1</li>
			<li id="n10">item2</li>
		</ul>
	</div>
</div>

现在,我们想要为每个ul标签内查找它的第2个li标签,则可以编写如下jQuery代码:

// 选择了id分别为n5、n10的两个元素
$("ul li:nth-child(2)");

接着,为每个ul标签查找自然顺序为奇数的li标签,则可以编写如下jQuery代码:

// 选择了id分别为n4、n6、n9的3个元素
$("ul li:nth-child(odd)");

为每个ul父标签查找自然顺序为3n的li标签,对应的jQuery代码如下:

// 选择了id为n6的一个元素
// 虽然这里用的#n1进行限定,实际上jQuery先是通过查找所有匹配#n1 li的元素,然后再看这些元素是不是父元素的第3n个元素,如果是就保留,否则就舍弃掉。
$("#n1 li:nth-child(3n)");

查找所有包含类名c的li标签,并且它们必须是父元素的偶数顺序的子元素,我们可以编写如下jQuery代码:

// 没有选择任何元素,返回空的jQuery对象
// 虽然匹配li.c的有n4、n6两个元素,但它们都不是父元素的偶数顺序的子元素,因此无法匹配
$("li.c:nth-child(even)");

运行代码

  • CodePlayer技术交流群1
  • CodePlayer技术交流群2

0 条评论

撰写评论

打开导航菜单