Javascript 如何隐藏具有给定类的所有元素的父元素,但父元素也有特定的类?

Javascript 如何隐藏具有给定类的所有元素的父元素,但父元素也有特定的类?,javascript,jquery,jquery-selectors,parent-child,Javascript,Jquery,Jquery Selectors,Parent Child,我想隐藏具有类parent的li元素的所有实例,这些实例具有类child-1的直接子div元素。下面是一个伪代码示例,其中方法hideParent()将隐藏所选元素的父元素: 下面是我的HTML示例,其中第二个和第三个li.parent元素应该被隐藏 <li class="parent"> <div class="child-0"> ... </div> </li> <li class="parent"> <div

我想隐藏具有类
parent
的li元素的所有实例,这些实例具有类
child-1
的直接子div元素。下面是一个伪代码示例,其中方法
hideParent()
将隐藏所选元素的父元素:

下面是我的HTML示例,其中第二个和第三个
li.parent
元素应该被隐藏

<li class="parent">
    <div class="child-0"> ... </div>
</li>
<li class="parent">
    <div class="child-1"> ... </div>
</li>
<li class="parent">
    <div class="child-1"> ... </div>
</li>
  • ...
  • ...
  • ...
  • 试试这个:

    $("li.parent > div.child-1").parent().hide();
    
    试试这个:

    $("li.parent > div.child-1").parent().hide();
    

    直接选择相关子元素,以其父元素为目标(由相关选择器过滤),然后隐藏它们

    $("div.child-1").parent('li.parent').hide();
    
    请参阅:

    直接选择相关的子元素,以其父元素为目标(通过相关选择器过滤),然后隐藏它们

    $("div.child-1").parent('li.parent').hide();
    
    请参阅:

    另一个选项是使用
    过滤器:

    $("li").filter(function () {
        var $this = $(this);
        var isParent = $this.hasClass("parent");
        var childMatchCount = $this.children("div").filter(".child-1").length;
        return isParent && childMatchCount;
    }).hide();
    
    演示:

    尽管这可以通过几种方式进行优化。但对我来说,从非常明确的意义上讲,它更“可读”。使用jsperf,我能使用的最快的
    过滤器是:

    $("li.parent").filter(function () {
        return $(this).children("div.child-1").length;
    }).hide();
    

    @Joe的答案是最快的:
    $(“li.parent>div.child-1”).parent()
    另一个选项是使用
    过滤器:

    $("li").filter(function () {
        var $this = $(this);
        var isParent = $this.hasClass("parent");
        var childMatchCount = $this.children("div").filter(".child-1").length;
        return isParent && childMatchCount;
    }).hide();
    
    演示:

    尽管这可以通过几种方式进行优化。但对我来说,从非常明确的意义上讲,它更“可读”。使用jsperf,我能使用的最快的
    过滤器是:

    $("li.parent").filter(function () {
        return $(this).children("div.child-1").length;
    }).hide();
    

    @乔的答案是最快的:
    $(“li.parent>div.child-1”).parent()

    噢,哇。我本该想到这一点,现在却因为错过了这个简单的解决方案而感到愚蠢。非常好,谢谢你!哦,哇。我本该想到这一点,现在却因为错过了这个简单的解决方案而感到愚蠢。非常好,谢谢你!这也是一个有用的答案。虽然乔提供的答案排在第一位,但却是新的信息。对我来说,
    parent()
    方法可以被过滤。我相信我将来会用这个。谢谢这也是一个有用的答案。虽然乔提供的答案排在第一位,但却是新的信息。对我来说,
    parent()
    方法可以被过滤。我相信我将来会用这个。谢谢