jQuery :odd 和 :nth-child CSS3 不同

Posted

技术标签:

【中文标题】jQuery :odd 和 :nth-child CSS3 不同【英文标题】:jQuery :odd and :nth-child CSS3 different 【发布时间】:2012-04-20 03:44:09 【问题描述】:

我发现 jQuery :odd 选择器和 CSS3 nth-child(odd) 的工作方式不同。 http://jsfiddle.net/TMDwT/5/

黄色是 CSS nth-child(odd) 如果你取消注释 JS 和注释 background: yellow in CSS 你会发现它以另一种方式找到。

谁能说说我是如何通过 CSS3 实现与 jQuery 相同的结果的?

谢谢!

【问题讨论】:

您的嵌套列表格式不正确。 li 元素必须是 menuolul 元素的子元素。 对不起,已修复。但问题依然存在。 jsfiddle.net/TMDwT/5 在 jQuery 中使用 nth-child(odd) 怎么样? @Hexxagonal: jQuery 的:nth-child() 是CSS3 的副本,所以不会有任何区别。 @BoltClock 这就是我的意思......他想知道如何在 jQuery 和 CSS 中实现相同的结果 【参考方案1】:

是的,:odd 和 :nth-child(odd) 不是一回事:

:odd 匹配匹配元素中的奇数项,即您应用选择器的 jQuery 对象的内容,

:nth-child(odd) 匹配其各自父项中的奇数项

这与:first:first-child:last:last-child 之间的区别相同。

更新: 正如 zzzzBov 和 BoltClock 正确指出的那样,:odd 选择器是从零开始的,而 :nth-child() 选择器是从一开始的。这意味着即使您将两个选择器应用于元素的完整子列表(从而消除了:odd:nth-child(odd) 之间的差异),它们仍然不会匹配相同的元素。

【讨论】:

以及“我可以在 CSS3 中做到这一点吗?”的答案。是没有。 别忘了提到:odd 使用从0 开始的索引,而:nth-child 使用从1 开始的索引。这意味着在单个列表中,它们仍然不会代表相同的选择。 @zzzzBov,绝对是,但发问者明确指的是:nth-child(odd),因此在这种特殊情况下,基于一个并不是真正的问题:) @Alex,CSS 选择器没有当前匹配的元素的概念,所以:odd 那里没有等价物。 @Frédéric Hamidi:实际上,这很重要。它们索引的差异正是奇数和偶数关键字表现不同的原因。

以上是关于jQuery :odd 和 :nth-child CSS3 不同的主要内容,如果未能解决你的问题,请参考以下文章

:nth-child(even/odd) 不适用于 acf

如何结合 flexbox 顺序和 nth-child(odd)

利用jquery怎么遍历table中的一列

通过jQuery交替表行

css中nth-child的属性

jQuery实现table隔行换色和鼠标经过变色