我找不到任何jQuery或CSS文档,但似乎存在:
var $list = $('<ul><li>1</li><li>2</li><li>3</li></ul>'); $list.find('li:nth(2)').text();
返回:“3”,
而:
$list.find('li:nth-of-type(2)').text(); $list.find('li:nth-child(2)').text();
都返回“2”
这个伪类是什么?有人可以点我一些文件吗?
解决方法
与其他答案相反:nth()不是CSS伪类选择器.
这是Sizzle engine中使用的一个鲜为人知的位置选择器:
:nth:
Finds thenth
element on the page.
你会发现上面的定义here in the Github documentation for Sizzle.
为什么选择不同的元素:nth-child()/:nth-of-type()?
nth()和您的其他选择器选择不同元素的原因是因为nth()是一个基于零的索引选择器,而CSS选择器是基于1的索引选择器.
这是可以理解的,这可能会令人困惑,因为大多数人会假设nth()将保持与类似命名的CSS伪类选择器(例如nth-child()和nth-type-type)的某种一致性 – 然而,如上所述,他们实际上并不是相关的.
所以,nth()的功能实际上更接近:eq()呢?
是.其实呢似乎就像nth() is exactly the same as eq():
Expr.pseudos["nth"] = Expr.pseudos["eq"];
This old mailing list conversation(2007)意味着John Resig计划删除:nth()选择器,原因如下:
“I’ve searched the groups but I can’t seem to find any related talk on
this. What,if any,is the difference between using:eq(n)
and
:nth(n)
? I’d like to know before I start standardizing on one or the
other. Thanks.” – Matt Penner“They’re the same,so you can use whichever you prefer. From jquery.js:
nth: "m[3]-0==i",
eq: "m[3]-0==i"
” – Karl Swedberg“Huh… I should probably nuke
:nth()
.” – John Resig
但是,正如您所注意到的那样,删除:nth()选择器从未实现(至2013年).
使用示例
HTML:
<p>1</p> <p>2</p> <p>3</p> <p>4</p>
jQuery的:
$('p:nth(2)').text(); // Returns 3 as zero-based index. $('p:eq(2)').text(); // Returns 3 as zero-based index. $('p:nth-child(2)').text(); // Returns 2 as one-based index. $('p:nth-of-type(2)').text(); // Returns 2 as one-based index.