【问题标题】:jQuery Selectors - where item does not have children with a certain classjQuery 选择器 - 项目没有特定类的子项
【发布时间】:2013-06-11 00:28:07
【问题描述】:

我想选择是#nav 的直接子级的列表项,它们本身没有具有“活动”类的直接子级。

这是我认为应该的,但它不起作用:

$('#nav > li:not(> a.active)')

【问题讨论】:

    标签: jquery css-selectors


    【解决方案1】:

    这就是你的做法:

        $('#nav > li:not(:has(a.active))')
    

    【讨论】:

      【解决方案2】:

      你需要使用 jQuery 的 filter 函数:

      $('#nav > li').filter(function() { return !($(this).children().is('.active')); })
      

      【讨论】:

      • 这比您的第一个解决方案还要好。我认为您应该保留那个作为替代品。还是有什么问题?
      • 不,这个似乎间歇性地工作。我正在回复之前的答案。
      • 这将返回没有活动的 li 元素,我不相信它会检查活动类的 li 元素的子元素。
      • 我认为 Jeremy B. 是对的。 “仅选择器”解决方案似乎并未针对孩子进行测试,而是仅针对 li
      • 我同意。取出仅选择器的答案并留下filter
      【解决方案3】:

      我真的很喜欢 Ken 的解决方案,但只是为了另一种选择。

      您可以将活动类添加到列表项中,而不是里面的链接。然后你的选择器可能看起来像:

      $("ul#nav li:not(.active)");
      

      如果您想根据活动类设置链接样式,您的 CSS 可能如下所示:

      #nav li.active a{background-color:red;}
      

      【讨论】:

      • 为什么这个答案被否决了两次?如果不正确,哪个部分不起作用,我该如何改进?
      • 这个答案不正确,因为它返回了li 的孩子。 Trevor 想要 li 元素本身。重新阅读问题。
      • 谢谢!我错过了那部分,我会改变我的答案来反映这一点。
      【解决方案4】:

      对于这个 jquery 有 not 选择器

      你可以做类似的事情

      $("#nav > li").children(":not(.active)");
      

      【讨论】:

      • 这不是 Trevor 想要的。他想要#nav 的孩子,他们自己没有“活跃”班级的直系孩子
      • 错过了那里的一个孩子,解决了这个问题。
      • 他要选择的元素是li元素。你的选择器会返回他们的孩子。
      • 好点子,措辞有点挑战性,但我知道他在找什么,会再看一遍。
      猜你喜欢
      • 1970-01-01
      • 2017-05-08
      • 2011-01-02
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      相关资源
      最近更新 更多