使用 jQuery 简单地显示和隐藏下一个和上一个
Simple Next and Previous Show and Hide with jQuery
我正在尝试通过添加和删除一些 classes 来找出显示和隐藏带有 Previous 和 Next 按钮的一系列 div 的最简单方法。
到目前为止,我可以触发“下一步”按钮,但它会将 active
class 添加到所有 div,而不仅仅是下一个。
我一直在通读其他示例,到目前为止,它们看起来真的很臃肿,或者不是我要找的东西。
这是我目前的情况:
Codepen Link: 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。
基本上你应该获得最后一个活动元素并在它之后激活下一个:
$('.next').on("click", function(){
const $active = $('.item.active');
const $next = $active.next();
if ($next.length) {
$active.removeClass('active');
$next.addClass('active');
}
})
您当前代码中的问题是您正在获取所有项目并对所有项目执行 hasClass
因此它 returns 始终为真,因为至少有一个元素带有此 class 然后你在每个项目元素之后得到下一个元素并向它们添加 active
class 这样你的所有元素都会在结果中被激活。
我想你想要这样的东西
$('a.next').on("click", function(){
var a = $('.item.active').last();
a.next().addClass('active');
a.removeClass('active')
});
我正在尝试通过添加和删除一些 classes 来找出显示和隐藏带有 Previous 和 Next 按钮的一系列 div 的最简单方法。
到目前为止,我可以触发“下一步”按钮,但它会将 active
class 添加到所有 div,而不仅仅是下一个。
我一直在通读其他示例,到目前为止,它们看起来真的很臃肿,或者不是我要找的东西。
这是我目前的情况:
Codepen Link: 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。
基本上你应该获得最后一个活动元素并在它之后激活下一个:
$('.next').on("click", function(){
const $active = $('.item.active');
const $next = $active.next();
if ($next.length) {
$active.removeClass('active');
$next.addClass('active');
}
})
您当前代码中的问题是您正在获取所有项目并对所有项目执行 hasClass
因此它 returns 始终为真,因为至少有一个元素带有此 class 然后你在每个项目元素之后得到下一个元素并向它们添加 active
class 这样你的所有元素都会在结果中被激活。
我想你想要这样的东西
$('a.next').on("click", function(){
var a = $('.item.active').last();
a.next().addClass('active');
a.removeClass('active')
});