【问题标题】:jquery hide rows of divs between two divs when having certain classjquery在具有某些类时隐藏两个div之间的div行
【发布时间】:2015-06-05 00:15:16
【问题描述】:
<div id="CntWrapper_CntMain_ssm_ctl00_ctl01" class="matrix">
  <div class="CollapseGroup1"></div>
  <div class="row">
    <div class="cell_24">&nbsp;</div>
  </div>
  <div class="row">
    <div class="cell_24">
      <span class="label-passive">text</span>
    </div>
  </div>
  <div class="CollapseGroupClose1"></div>
</div>

我正在尝试操作上面的 HTML 代码示例。这是实际 HTML 代码的简化版本。

<script type="text/javascript">
  $(document).ready(function() {
    $('.CollapseGroup1').nextUntil('.CollapseGroupClose1',').css( "display", "none" );
  });
</script>

此脚本隐藏了两个名为 collapsegroup 和 collapsegroupclose 的 div 之间的所有类 'row' 的 div。

但是,当这些行中的任何一行包含至少一个具有“label-passive”类的跨度时,我只想隐藏具有“行”类的 div 元素。

<script type="text/javascript">
  $(document).ready(function() {
    $('.CollapseGroup1').nextUntil('.CollapseGroupClose1','div[.label-passive]').css( "display", "none" );
  });
</script>

当存在带有 label-passive 的 span 时,只是简单地隐藏任何行 div 是不够的。在我不想隐藏的这些折叠组 div 之外,可能会有带有“标签被动”跨度类的行。

我想隐藏两个collapsegroup标签之间的所有行,即使其中只有一行实际上有一个子span元素,类为“label-passive”。

【问题讨论】:

  • 你的问题太长了,没有人会费心阅读它.....考虑把它减半并提供一个演示页面
  • 尤其是删掉已经在工作的东西。我们应该能够从一开始就快速了解您的问题是什么
  • 我已经重写了这个东西。用例确实需要一些解释,所以还有一些文字,但我可能已经将问题缩短了一半。我希望这使它更具可读性。

标签: javascript jquery html


【解决方案1】:

所以,在阅读了您的问题一次之后.. 两次.. Trice.. 我认为您想要这个: (专业提示:尽量让您的问题尽可能简单,如果必须使用伪代码)

$('.label-passive').parents('._row').hide();

如果这不完全是您想要的,请发表评论,我会尝试改进答案。

编辑:随着 OP 改进了他的问题,改进了答案:

也许这会进一步帮助你:

$('.CollapseGroup1').each(function() {
    if ($(this).find(".label-passive").length != 0)
        $(this).hide();
});

【讨论】:

  • 遗憾的是,我再次重写了我的帖子,只使用了非常简单的示例 HTML 代码。诚然,它现在更具可读性。我想隐藏两个具有“Collapsegroup”和“Collapsegroupclose”类的 div 之间的所有行(div),这取决于这些行中是否只有一个具有“label-passive”类的跨度。
  • @MaartendeVries 没问题,我检查了您的编辑,并改进了我的答案。请让我知道这是否更好。
  • 您编辑的答案也不起作用。在这里,您假设我要编辑的 div 标签位于 collapsegroup 节点中。不是这种情况。我需要两个div之间的所有div,或者collapsegroup和collapsegroupclose。在 HTML 示例中,这意味着我希望隐藏具有“行”类的两个 div,只是因为这两个 div 中的一个具有类“标签被动”的跨度
【解决方案2】:

你可以试试这个:

$('div.row:has(.label-passive)').hide();

【讨论】:

    【解决方案3】:

    试试closest():

    $('span.label-passive').closest('div.row').hide();
    

    $(function() {
      $('span.label-passive').closest('div.row').hide();
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <div id="CntWrapper_CntMain_ssm_ctl00_ctl01" class="matrix">
      <div class="CollapseGroup1"></div>
      <div class="row">
        <div class="cell_24">&nbsp;</div>
      </div>
      <div class="row">
        <div class="cell_24">
          <span class="label-passive">text</span>
        </div>
      </div>
      <div class="CollapseGroupClose1"></div>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 2021-12-14
      • 2012-09-09
      • 1970-01-01
      相关资源
      最近更新 更多