在多个父母中选择第 n 个孩子

Posted

技术标签:

【中文标题】在多个父母中选择第 n 个孩子【英文标题】:Select nth-child across multiple parents 【发布时间】:2013-07-13 05:12:57 【问题描述】:

我有以下标记:

<div class="foo">
    <ul>
        <li>one</li>
        <li>two</li>
    </ul>
    <ul>
        <li>three</li>
    </ul>
    <ul>
        <li>four</li>
    </ul>
</div>

我希望设置“一”和“三”的样式。

但是,标记也可以是:

<div class="foo">
    <ul>
        <li>one</li>
        <li>two</li>
        <li>three</li>
    </ul>
    <ul>
        <li>four</li>
    </ul>
</div>

我尝试过使用以下 CSS:

.foo li:nth-child(1),
.foo li:nth-child(3)

    color:red;

但是,正如预期的那样,这是每个ul 的第一个孩子的样式。 (演示:http://jsfiddle.net/hTfVu/)

如何更改我的 CSS 以便可以定位属于 .foo 的第一个和第三个 li

【问题讨论】:

【参考方案1】:

你不能单独使用 CSS 选择器来做到这一点。 :nth-child() 和兄弟组合器仅限于共享相同父级的子级/兄弟级,正如他们的名字所暗示的那样,CSS 选择器不能解释父子结构中的这种变化,也没有像 :nth-grandchild() 选择器这样的东西(甚至:nth-match() from Selectors 4 仅限于共享同一父级的元素。

当然,对于像 jQuery 这样的东西,它变得微不足道:$('.foo li:eq(0), .foo li:eq(2)') 否则你必须使用类或 ID 显式标记第一个和第三个 li 元素,然后选择它们。

【讨论】:

【参考方案2】:

您可以使用偶数和奇数选择器。

li:nth-child(odd) 
  color: red;

li:nth-child(even) 
  color: white;

【讨论】:

不确定这与问题有什么关系。 第一个和第三个孩子是奇数,使用 li:nth-child(odd) 可以让您只针对这两个孩子。没关系,我现在看到了。对不起。 除了问题是关于选择不同父母的孩子。

以上是关于在多个父母中选择第 n 个孩子的主要内容,如果未能解决你的问题,请参考以下文章

jquery选择器需要选择父母的所有某些孩子

TSQL:根据孩子的条件选择父母

csharp 选择LLBLGen中没有孩子的父母。

如果孩子有特定的班级,Sass 选择父母

防止第 n 个孩子选择嵌套 div 内的元素

如果孩子有特定的班级,则选择父母