如何选择父类未指定类的元素?

Nao*_*den 28 jquery jquery-selectors

我想隐藏一个元素,如果它的父元素没有某个类:

HTML

<li class="current_page_parent">
    <a href="parent.html">Parent</a>
    <ul class="children">
        <li>foo</li>
        <li>bar</li>
    </ul>
</li>
Run Code Online (Sandbox Code Playgroud)

jQuery的

jQuery("ul.children").hide();
Run Code Online (Sandbox Code Playgroud)

目前总是隐藏<ul class="children">不分类.我想关闭它只有父母是:not一个<li class="current_page_parent">.

我试过了:

jQuery("ul.children:not(:parent.current_page_ancestor)").hide();
Run Code Online (Sandbox Code Playgroud)

没有运气.

hlc*_*lcs 42

我认为最好的方法:

$(".children").not(".current_page_parent .children").hide();
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

  • 我认为这应该是公认的答案,因为它涵盖了更为通用的方法. (3认同)

Cha*_*ndu 33

试试这个:

jQuery("li:not(.current_page_parent) ul.children").hide();
Run Code Online (Sandbox Code Playgroud)

  • 在现代浏览器上,这将比我删除的答案(使用`:not(.current_page_ancestor> ul)`)在显微镜上更快,因为它是一个有效的CSS选择器,与我的不同.CSS3`:not()`只接受一个简单的选择器 - 选择器序列将由jQuery的选择器引擎处理,这比`querySelectorAll()`慢. (4认同)
  • 如果父元素中没有“current_page_parent”类的第二个 &lt;li&gt; 元素,则此解决方案将不起作用。@2nd 给出的解决方案要健壮得多。 (2认同)

use*_*742 5

$('ul').filter(function() {
    return $(this).parent('.current_page_parent').length === 0
}).hide();
Run Code Online (Sandbox Code Playgroud)