jQuery的简单下一个和上一个显示和隐藏

时间:2018-10-12 17:24:07

标签: javascript jquery css pagination show-hide

我正在尝试通过添加和删除一些类来找出最简单的方法来显示和隐藏带有上一个和下一个按钮的一系列div。

到目前为止,我可以单击“下一步”按钮来触发,但它是将active类添加到所有div中,而不仅仅是行中的下一个。

我一直在阅读其他示例,到目前为止,它们似乎真的很blo肿,或者不是我想要的。

这是我到目前为止所拥有的:

Codepen链接: https://codepen.io/ultraloveninja/pen/pxrrmy/

HTML:

<div class="group">
  <div class="item active">
    <h2>Thing One</h2>
  </div>
  <div class="item">
    <h2>Thing Two</h2>
  </div>
  <div class="item">
    <h2>Thing Three</h2>
  </div>
</div>
<div class="btns">
  <a href="#" class="btn prev">Previous</a>
  <a class="btn next" href="#">Next</a>
</div>

JS:

$('.next').on("click", function(){
  if($('.item').hasClass('active')) {
    $('.item').next().addClass('active');

  }
})

CSS:

body {
  padding: 10px;
}
.active {
  display:block !important;
}

.item {
  display:none;
}

这似乎应该很简单,但是我似乎无法考虑如何在不显示所有其他div的情况下单独定位下一个div。

2 个答案:

答案 0 :(得分:2)

基本上,您应该获得最后一个活动元素,然后在其后激活:

$('.next').on("click", function(){
  const $active = $('.item.active');
  const $next = $active.next();

  if ($next.length) {
    $active.removeClass('active');
    $next.addClass('active');
  }
})

当前代码中的问题是,您正在获取所有项目并在所有项目上执行hasClass,因此它始终返回true,因为此类中至少有一个元素,然后您将获得下一个项目元素,然后在每个元素之后添加active类,以便您的所有元素都在结果中被激活。

答案 1 :(得分:1)

我想你想要这样的东西

$('a.next').on("click", function(){
  var a = $('.item.active').last();
  a.next().addClass('active');
  a.removeClass('active')
});