8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如果类存在,则在下一个相同类的 div 之前显示 div

Joe Coyle 1月前

15 0

我希望代码遍历每个 div,如果它具有 \'type2\' 或 \'type3\' 类,则显示其上方具有 \'itemheader\' 类的 div。它不是嵌套的...

我希望代码遍历每个 div,如果它的类为 \'type2\' 或 \'type3\',则显示其上方的类为 \'itemheader\' 的 div。它不是嵌套的,因此不是父/子情况。但是,如果第一个项目是 \'type1\' 或 \'type2\',则此代码仅显示 \'itemheader\' div。有时会有多个 \'type1\' 实例直接位于其上方或下方,或者可能根本不存在。

带有 \'type1\' 的 div 已经使用 CSS 隐藏。

更改 HTML 代码不是一个选项,它是由另一个程序自动生成的并且无法更改,我试图操纵它以仅显示某些文本。

现有的 HTML 代码:

<div class="itemheader">content</div>
    <div class="itemcontent type1">content</div>
    <div class="itemcontent type2">content</div>
    <div class="itemcontent type3">content</div>
<div class="itemheader">content</div>
    <div class="itemcontent type3">content</div>
<div class="itemheader">content</div>
    <div class="itemcontent type2">content</div>
    <div class="itemcontent type2">content</div>
    <div class="itemcontent type3">content</div>
<div class="itemheader">content</div>
    <div class="itemcontent type1">content</div>
<div class="itemheader">content</div>
    <div class="itemcontent type1">content</div>
<div class="itemheader">content</div>
    <div class="itemcontent type1">content</div>
    <div class="itemcontent type1">content</div>
    <div class="itemcontent type2">content</div>
    <div class="itemcontent type3">content</div>
    <div class="itemcontent type1">content</div>

期望显示的结果:

<div class="itemheader">content</div>
    <div class="itemcontent type2">content</div>
    <div class="itemcontent type3">content</div>
<div class="itemheader">content</div>
    <div class="itemcontent type3">content</div>
<div class="itemheader">content</div>
    <div class="itemcontent type2">content</div>
    <div class="itemcontent type2">content</div>
    <div class="itemcontent type3">content</div>
<div class="itemheader">content</div>
    <div class="itemcontent type2">content</div>
    <div class="itemcontent type3">content</div>

现有的 jQuery

$(".itemheader").hide();

$(".itemheader").each(function() {
  if ($(this).next().hasClass("type2")) {
    $(this).show();
  }
  if ($(this).next().hasClass("type3")) {
    $(this).show();
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<div class="itemheader">itemHeader</div>
<div class="itemcontent type1">content type 1</div>
<div class="itemcontent type2">content type 2</div>
<div class="itemcontent type3">content type 3</div>
<div class="itemheader">itemHeader</div>
<div class="itemcontent type3">content type 3</div>
<div class="itemheader">itemHeader</div>
<div class="itemcontent type2">content type 1</div>
<div class="itemcontent type2">content type 2</div>
<div class="itemcontent type3">content type 3</div>
<div class="itemheader">itemHeader</div>
<div class="itemcontent type1">content type 1</div>
<div class="itemheader">itemHeader</div>
<div class="itemcontent type1">content type 1</div>
<div class="itemheader">itemHeader</div>
<div class="itemcontent type1">content type 1</div>
<div class="itemcontent type1">content type 1</div>
<div class="itemcontent type2">content type 2</div>
<div class="itemcontent type3">content type 3</div>
<div class="itemcontent type1">content type 1</div>

我曾尝试使用 nextUntil() 和 filter(),但这只会设置 \'itemcontent\' div 的样式,而不是 \'itemheader\' div。

测试功能的示例:

$('.itemheader').nextUntil('.itemheader').filter('.type2').css('backgroundColor', 'yellow');
帖子版权声明 1、本帖标题:如果类存在,则在下一个相同类的 div 之前显示 div
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Joe Coyle在本站《jquery》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 这是一个解决方案:首先隐藏全部 $(".itemcontent.type1") ,然后 $(".itemheader") 仅当下一个可见元素不是 .itemheader (选择使用 nextAll(':visible').first() )

    $(".itemcontent.type1").hide();
    
    $(".itemheader").each(function() {
      if (!$(this).nextAll(':visible').first().hasClass("itemheader")) {
        $(this).show();
      } else {
        $(this).hide();
      }
    });
    .itemheader {
      font-weight: bold;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <div class="itemheader">itemHeader</div>
    <div class="itemcontent type1">content type 1</div>
    <div class="itemcontent type2">content type 2</div>
    <div class="itemcontent type3">content type 3</div>
    <div class="itemheader">itemHeader</div>
    <div class="itemcontent type3">content type 3</div>
    <div class="itemheader">itemHeader</div>
    <div class="itemcontent type2">content type 2</div>
    <div class="itemcontent type2">content type 2</div>
    <div class="itemcontent type3">content type 3</div>
    <div class="itemheader">itemHeader</div>
    <div class="itemcontent type1">content type 1</div>
    <div class="itemheader">itemHeader</div>
    <div class="itemcontent type1">content type 1</div>
    <div class="itemheader">itemHeader</div>
    <div class="itemcontent type1">content type 1</div>
    <div class="itemcontent type1">content type 1</div>
    <div class="itemcontent type2">content type 2</div>
    <div class="itemcontent type3">content type 3</div>
    <div class="itemcontent type1">content type 1</div>
返回
作者最近主题: