【问题标题】:I'm trying to select a nested ul, tried with css but having trouble我正在尝试选择嵌套的 ul,尝试使用 css 但遇到问题
【发布时间】:2013-11-13 16:31:09
【问题描述】:

我有一个 cms 为我正在设计的网站呈现菜单,我需要选择父菜单项的子项。以下是代码的生成方式:

<div class="menu">
    <ul>
         <li></li>
         <li><a href="" class="CurrentButton" ... />text</a>
              <div>
                   <ul></ul>
              </div>
         </li>
    </ul>
</div>

我已经尝试过这个 CSS 来尝试选择它,但是除了显示之外它一直没有成功:none;

.menu ul li div {
    display: none;
}

.menu > ul > li > a.CurrentButton div {
    display: block;
}

谁能看到我做错了什么? jquery函数会更容易吗?我对 jquery 还很陌生,所以我不确定如何为它编写一个函数。

当 li 中的锚点具有 CurrentButton 类时,我试图选择 li 中的 div,如果 li 中的锚点没有类,那么我希望它隐藏

【问题讨论】:

  • 我假设您的 .menu 是父 div。您的第二个选择器尝试选择 a.CurrentButton 内的一个 div。在这个带有应用类的锚内部没有 div。 div 与锚点处于同一级别。
  • 这是包裹在列表周围的 div,我将编辑代码

标签: javascript jquery html css css-selectors


【解决方案1】:

您提供的两个示例都依赖于查找.menu 元素,但您的代码中不存在任何示例。 现在可以了。

a.CurrentButton div 选择任意 a.CurrentButtons 的任意 divs inside。但是,您的 div 不在 as 内。试试这个:

.menu ul > li > a {
    //selects all the as, but non of the divs
}

.menu ul > li > * {
    //selects anything inside a 'li', both 'a's and 'div's
}

要选择divs 跟在a.CurrentButtons 之后,使用这个:

.menu ul li > a.CurrentButton + div {
    //any 'div's that are directly after 'a.CurrentButton'
}

【讨论】:

  • 如果锚具有 CurrentButton 类,我只需要选择 div,这是我使用的 cms 呈现列表的唯一方式。
【解决方案2】:

如果你真的需要具体,使用相邻元素运算符(+)

.menu > ul > li > a.CurrentButton + div {

否则,您的目标是一个不存在的 CurrentButton 后代的 div。

如果您不需要那么具体,请使用与之前相同的选择器:

.menu > ul > li > div {

【讨论】:

  • 我试过这个,但它没有用,试着把 !important 也放在上面,但没有运气
  • 第一个,第二个会选择它没有问题,但我只需要在锚上有 CurrentButton 类的情况下选择 div,否则我希望它被隐藏
  • 这行得通:jsfiddle.net/8SPKc 如果不行,你必须有其他 CSS 覆盖这个。如果选择器变得更具体,例如它们命名类或 id,就会发生这种情况。您可以使用检查元素查看正在应用哪些规则
  • 谢谢你,取出 > 符号似乎可以解决问题,虽然很奇怪,但不会认为它们是个问题 :P 不管怎样,谢谢你帮助我 :)
【解决方案3】:

假设上面的&lt;ul&gt; 是类.menu 的元素的子元素,那么上面的&lt;div&gt; 不是a.CurrentButton 的子元素,所以你应该这样选择它:

.menu > ul > li > div {
    display: block;
}

你知道&gt; 只选择一个元素的direct children

【讨论】:

  • 问题是我只想在锚有 .CurrentButton 类的情况下选择它,这是这个特定 CMS 工作的唯一方式,这很糟糕
【解决方案4】:

试试这个:

在您的 HTML div 中是 a.CurrentButton 的兄弟。所以,你应该使用+ 符号。

.menu ul li div {
    display: none;
}

.menu > ul > li > a.CurrentButton + div {
    display: block;
}

【讨论】:

  • 这不起作用,我尝试将 !important 放在显示屏上:也没有运气,但感谢您的回答
  • 我不这么认为。正如您的问题中显示的 HTML 一样,这肯定会起作用。再次检查您的 HTML 或再次在此处发布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-15
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 2013-09-02
  • 2011-10-20
相关资源
最近更新 更多