【问题标题】:Hide parent element if no elements exist in child element如果子元素中不存在任何元素,则隐藏父元素
【发布时间】:2022-01-13 12:49:59
【问题描述】:

查看以下标记:

<div class="careersIntegration__listing" id="careers-listing">
  
  <div class="careersIntegration__accordion">
    <div class="careersIntegration__accordion-header">
      <span class="careersIntegration__accordion-dept">Sales</span>
    </div>
    <div class="careersIntegration__accordion-jobs" data-dept="sales"></div>
  </div>
  
  <div class="careersIntegration__accordion">
    <div class="careersIntegration__accordion-header">
      <span class="careersIntegration__accordion-dept">Customer Success</span>
    </div>
    <div class="careersIntegration__accordion-jobs" data-dept="customer-success">
      <figure class="careerCard" data-dept="customer-success">Job</figure>
    </div>
  </div>
  
</div>

我试图隐藏 .careersIntegration__accordion.careersIntegration__accordion-jobs 没有子元素的元素。

为简化起见,如果.careersIntegration__accordion-jobs 没有子元素,则隐藏父元素.careersIntegration__accordion

我在现有的 SO 帖子中看到了示例(请参阅此帖子),但无法在我的实例中使用该方法。请参阅下面我尝试过的帖子:

使用下面我当前的方法,else 语句被执行,不确定为什么?

$(".careersIntegration__accordion").each(function(){
  if( $(this).children(".careersIntegration__accordion-jobs").length == 0 ){
    $(this).parent().hide();
  } else{
    console.log('has children');
  }
});

【问题讨论】:

  • .children(selector) = .children().filter(selector),不是.find("&gt;" + selector).children()

标签: javascript html jquery


【解决方案1】:

与你的假设相反

$(this).children(".careersIntegration__accordion-jobs")

不返回使用 CSS 类 careersIntegration__accordion-jobs 的元素的子元素。事实上,它只返回使用这个 CSS 类的实际元素。如果你想拥有它的孩子,你需要将另一个电话附加到.children()

例如:

$(".careersIntegration__accordion").each(function() {
  if ($(this).children(".careersIntegration__accordion-jobs").children().length == 0) {
    $(this).hide();
  } else {
    console.log('has children');
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="careersIntegration__listing">

  <!-- this should be hidden -->
  <div class="careersIntegration__accordion">
    <div class="careersIntegration__accordion-header">
      <span class="careersIntegration__accordion-dept">Sales</span>
    </div>
    <div class="careersIntegration__accordion-jobs"></div>
  </div>


  <!-- this should not be hidden -->
  <div class="careersIntegration__accordion">
    <div class="careersIntegration__accordion-header">
      <span class="careersIntegration__accordion-dept">Tech</span>
    </div>
    <div class="careersIntegration__accordion-jobs">
      <div>item</div>
    </div>
  </div>


</div>

【讨论】:

  • 嗨,使用.$(this).parent().hide(); 隐藏. careersIntegration__listing div。我已经用.$(this).hide(); 进行了尝试,因此它以.careersIntegration__accordion div 为目标。但是,这对我也不起作用,它隐藏了所有 .careersIntegration__accordion div
  • 对不起,我没有测试你的那部分代码,因为我认为它是正确的。我刚刚更正了答案中的 sn-p 以改用 $(this).hide(); ,它似乎可以工作,因为只有 Sales div 消失了。还是没有运气?
  • 嗯,我已经完全复制了你的js,但在我的例子中,它隐藏了所有的 div。在此处查看图片:i.imgur.com/lcK05RS.png。从图中可以看到,一个.careersIntegration__accordion-jobs 有子元素,一个没有,但它们都被js 锁定和隐藏
  • .careersIntegration__accordion 的内联样式由hide() 函数设置。我在 .careersIntegration__accordion 上没有设置内联或其他 CSS
  • 您能否将您的确切代码作为有效的 sn-p 发布到您的问题中?
【解决方案2】:

您可以使用html() 获取您需要的信息,然后检查它是否等于空字符串:

$(this).children(".careersIntegration__accordion-jobs").html() === ''

这应该可以解决问题!

【讨论】:

  • 你需要考虑空格,所以在比较之前确保你 trim()
【解决方案3】:

因为 $(this).children(".careersIntegration__accordion-jobs").length 只计算类 careersIntegration__accordion-jobs 的元素 - 但您想检查这些元素的子元素。

以下代码有效:

$(document).ready(function(){
  $(".careersIntegration__accordion .careersIntegration__accordion-jobs").each(function(){
  console.log("children().length="+$(this).children().length);
    if( $(this).children().length == 0 ){
      $(this).hide();
      console.log('no children');
    } else{
      console.log('has children');
    }
  });
});
在这里查看:https://jsfiddle.net/czs0uya5/

【讨论】:

  • 嗨,使用if( $(this).find(".careersIntegration__accordion-jobs div").length == 0 ){ 隐藏了我所有的.careersIntegration__accordion 部分
  • 试试$(this).hide();而不是$(this).parent().hide();
  • 有了上面,它隐藏了我所有的'。职业整合__手风琴`divs
  • 您的 jQuery 代码是否放置在 $(document).ready(function(){...&lt;here&gt;...}); 中?
  • 是的。除此之外,我也没有控制台错误
猜你喜欢
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多