javascript - 尝试将类应用于通过 jquery 过滤的元素

标签 javascript jquery html css

我正在为我的站点创建一个页面,其中的元素可以在搜索功能下显示为列表。

我的页面布局使用“小”和“大”类来使元素并排显示。我试图让这些元素交替出现,所以模式如下:

1 - 小 2 - 大

3 - 大 4 - 小

5 - 小 6 - 大

完整列表依此类推。

我试图通过第 nth-child 来解决这个问题,但是当我通过 jQuery 过滤列表时,我无法将小型和大型类仅应用于显示的事件('.current')类,所以我最终有很多空白区域,其中 div 已被过滤掉。因此,我试图将其仅应用于列表中的“当前”div。

我创建了一个不优雅的伪解,但我不能无限重复这个问题,因为像 7、11 和 19 这样的数字不适用于方程。

我已经复制了下面的相关代码来说明我的意思,因为您可以看到底部的 div 停止遵循该模式。

:even 和 :odd 也不适用于此,因为“large”需要应用于 2,3,6,7,10,11 等等。

不确定我是否只是遗漏了一些非常明显的东西!

$(document).ready(function() {

  if ($('.event-single').hasClass('current')) {
    $('.event-single.current').each(function(index) {
      if ((index + 1) % 3 == 0) {
        $(this).addClass('large').removeClass('small');
      }
    })
    $('.event-single.current').filter(function(index) {
      if ((index + 1) % 2 == 0) {
        $(this).addClass('large').removeClass('small');
      }
    })
    $('.event-single.current').filter(function(index) {
      if ((index + 1) % 7 == 0) {
        $(this).addClass('large').removeClass('small');
      }
    })
    $('.event-single.current').filter(function(index) {
      if ((index + 1) % 11 == 0) {
        $(this).addClass('large').removeClass('small');
      }
    })
    $('.event-single.current').filter(function(index) {
      if ((index + 1) % 18 == 0) {
        $(this).addClass('large').removeClass('small');
      }
    })
    $('.event-single.current').filter(function(index) {
      if ((index + 1) % 4 == 0) {
        $(this).addClass('small').removeClass('large');
      }
    })
    $('.event-single.current').filter(function(index) {
      if ((index + 1) % 9 == 0) {
        $(this).addClass('small').removeClass('large');
      }
    })
  }
});
.event-info {
  background-color: blue;
  height: 300px;
}

.large {
  width: 60%;
  height: 350px;
  float: left;
  border: 2px solid #fff;
  border-radius: 50px
}

.small {
  width: 37%;
  height: 350px;
  float: left;
  border: 2px solid #fff;
  border-radius: 50px
}

.list-of-events-inner {
  overflow: hidden
}

.event-single:not(.current) {
  display: none;
}

.event-single .hero-post-mini-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 50px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row">

  <div class="list-of-events-inner" id="list-of-hotels-inner">

    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>

最佳答案

我想我明白你想做什么。您应该能够调整您的 javascript - 查看索引 mod 4,如果我理解正确的话,您希望 0 和 3 变小。

$(document).ready(function() {
  $('.event-single.current').each(function(num, elem) {
    var mod = num % 4;
    if (mod === 0 || mod === 3) {
      $(elem).addClass('small').removeClass('large');
    } else {
      $(elem).addClass('large').removeClass('small');
    }
  });
});
.event-info {
  background-color: blue;
  height: 300px;
}

.large {
  width: 60%;
  height: 350px;
  float: left;
  border: 2px solid #fff;
  border-radius: 50px
}

.small {
  width: 37%;
  height: 350px;
  float: left;
  border: 2px solid #fff;
  border-radius: 50px
}

.list-of-events-inner {
  overflow: hidden
}

.event-single:not(.current) {
  display: none;
}

.event-single .hero-post-mini-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 50px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row">

  <div class="list-of-events-inner" id="list-of-hotels-inner">

    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>
    </div>
    <div class="event-single current small">
      <div class="event-info">
      </div>

关于javascript - 尝试将类应用于通过 jquery 过滤的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54330275/

相关文章:

javascript - 将错误从 Controller 显示到 Bootstrap Alert

jQuery Select2 样式更新更改 CSS 类样式

android - 为什么我的 Google 字体没有显示在移动设备上?

javascript - 从 Javascript 传递到 Java 时,具有高 Unicode 字符的字符串会损坏

JavaScript indexOf 忽略大小写

javascript - 使用 Jquery 选择多个元素,但使用 addClass() 仅向其中一个元素添加一个类

jquery - 如何将绝对定位的 div 保持在可调整大小的可拖动容器 div 的中心?

jQuery:偏移问题

html - 动态占用空间并使宽度相等

javascript - PHP、Javascript 获取mysql数据并在javascript中进行计算