【问题标题】:css selector understandingcss选择器理解
【发布时间】:2013-03-12 09:29:54
【问题描述】:

我正在尝试选择包含直接<ul> 子元素的<li> 元素的第一个直接子元素<p>

li>ul:parent>p:first-child

是我尝试过的,认为它会立即获得liul 然后回到原来的li:parent 选择器然后选择立即p的孩子是第一个。

例如

<ul>
    <li>
        <p>SELECT ME!</p>
        <ul>
            <li><!--some more stuff-->
        </ul>
    </li>
</ul>

按照 cmets,我应该说我在 jQuery 选择器中使用它,并且在 jQuery API 页面中找到了 :parent 选择器。

【问题讨论】:

  • CSS 恐怕没有父选择器。这可能对你有用:ul > li > p + ul
  • 没有:parent选择器
  • 你可以在 CSS4 中做到这一点,但不是现在。
  • @dfsq 真的吗?有链接吗?
  • 所以你想要 jQuery 选择器,而不是 CSS?

标签: jquery css jquery-selectors css-selectors


【解决方案1】:

您遇到的问题是 li &gt; ul:parent 将选择 &lt;ul&gt; 元素,但指定 &gt; p:first-child 不匹配任何内容,因为您的 p 元素在 li 内,而不是&lt;ul&gt;.

您可以为此使用 jQuery 的 :has() 选择器:

$('li:has(ul) > p:first-child').css('background-color', 'red');

这是jsFiddle demo

很遗憾,我认为纯 CSS 无法做到这一点。

【讨论】:

  • 干杯,我以为 jQuery TAG:parent 会选择 TAG 的父级
  • 是的,确实如此。我的意思是,在您的标记中,ul &gt; p:first-child 不匹配任何元素。
  • 我认为ul:parent 解决了 li` 所以li&gt;p:first-child 最终是我得到的。感谢您解决这个问题。
  • @BenM:“是的,确实如此。”如果您的意思是“是”,TAG:parent 会选择 TAG 的父级...不,它不会。
【解决方案2】:

li > ul ~ p:first-of-type

选择你想要的?这应该选择p 元素,它们是p 的第一个子元素,它们是ul 元素的兄弟,它们是lis 的直接子元素。请参阅后代和兄弟选择器上的 this post

编辑:仔细观察,我发现这与您的设置相当工作,因为p 需要在源代码中的ul 之后.也许您可以稍微更改一下您的源顺序?

【讨论】:

  • :first_child 应该是:first-child,不是吗?
  • ul ~ p:first-child 作为选择器没有意义,无论设置如何。即使您更改源,:first-child 选择器也可能是不必要的。
【解决方案3】:

我建议将 id 放在顶级 ul 上,这样可以防止您意外匹配嵌套 li 中的任何 p:first-child

JSFiddle

JQuery

$('#top>li>ul').parent().find('>p:first-child');

【讨论】:

  • true 但我希望 p 可以点击到 slideToggle 嵌套的 uls 我不确定我是否希望它只是顶层还是所有级别,可能全部.
猜你喜欢
  • 2010-10-05
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
  • 2015-07-18
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多