CSS 选择器 :nth-child(even) 与 jQuery( ":even" )

Posted

技术标签:

【中文标题】CSS 选择器 :nth-child(even) 与 jQuery( ":even" )【英文标题】:CSS selector :nth-child(even) Vs jQuery( ":even" ) 【发布时间】:2014-12-17 14:28:15 【问题描述】:

jQuery 选择 first roweven(基于 0),而 CSS 选择 second roweven(基于 1)。 是的,jQuery documentation 在附加说明中明确提到它是一个扩展,而不是 CSS 的一部分 -

因为 :even 是一个 jQuery 扩展,而不是 CSS 的一部分 规范,使用 :even 的查询不能利用 本机 DOM querySelectorAll() 提供的性能提升 方法。使用 :even 选择时达到最佳性能 元素,首先使用纯 CSS 选择器选择元素,然后 使用 .filter(":even")。

但是在决定什么是偶数和什么是奇数时,它们不应该是相同的吗?为什么会出现混乱?

$('ul li').filter(':even').text('jQuery Even')
li 
  color: blue;

li:nth-child(even) 
  color: red;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<ul>
  <li>CSS Odd</li>
  <li>CSS Even</li>
  <li>CSS Odd</li>
  <li>CSS Even</li>
  <li>CSS Even</li>
</ul>

【问题讨论】:

您已经确定了差异:从零开始计数和从一开始计数。要使它们匹配,只需使用 css 的 :nth-child(even) 作为 jQuery 选择器。 @DavidThomas 感谢您的回复。您有任何参考资料说明了保持这种差异的原因。 【参考方案1】:

即使在文档中,也指出行为counter-intuitively, :even selects the first element, third element, and so on within the matched set.

由于我认为这种行为没有任何技术原因(除了索引是偶数),因此就“为什么以这种方式设计”而言,这实际上更像是一个“为什么”的问题。对于创建它的人来说,也许它更容易或更直观。 :nth-child(even) 是 CSS3 选择器模块规范的一部分,到目前为止,它是 Recommendation,但在 jQuery 1.0(2006 年引入 :even 时)仍然是候选推荐。

至于为什么它仍然是 jQuery 中的行为,这可能是为了反向兼容,因为修改行为可能会破坏所有依赖旧行为的现有网站和代码。

【讨论】:

与我的口味并不完全相反,计算中类数组元素的索引往往以 0 开头,这是一个偶数。

以上是关于CSS 选择器 :nth-child(even) 与 jQuery( ":even" )的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CSS“nth-child”选择器选择自定义行数? [关闭]

H5-伪类选择器-伪元素选择器

CSS3中新增属性总结

css中nth-child的属性

CSS中:nth-child的用法

结构伪类选择器