[英]Adding and removing class in jquery
I'm trying to show/hide my div elements using slidetoggle
and slideDown
. 我正在尝试使用
slidetoggle
和slideDown
显示/隐藏我的div元素。 Its working perfectly fine. 它的工作非常好。 Now what I'm trying to do is, I want to
addClass
'visible-divs' to the visible divs only and removeClass
when they get hidden. 现在我想要做的是,我想只将
addClass
-divs'添加到可见div,并在隐藏时removeClass
。
Problem is, the class is added succesfully but it doesn't remove the class when it slides up
to hide them. 问题是,该类是成功添加的,但是当它
slides up
以隐藏它时它不会删除该类。 What am I doing wrong? 我究竟做错了什么?
$(".OffersContainer > div:gt(0)").hide(); $(".OffersContainer > span").click(function() { this.clickCount = (this.clickCount || 0) + 1 var command = this.clickCount % 3 === 0 ? 'slideToggle' : 'slideDown'; $(this).siblings(this.clickCount % 3 === 1 ? "div:lt(3)" : "div:gt(0)")[command](); $('.pan-box').filter(':visible').addClass("visible-divs"); $('.pan-box').filter(':hidden').removeClass("visible-divs"); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="OffersContainer"> <div class='pan-box'>A</div> <div class='pan-box'>B</div> <div class='pan-box'>C</div> <div class='pan-box'>D</div> <div class='pan-box'>E</div> <span>Show more</span> </div>
For this to work you need to select the :visible
/ :hidden
elements after the animation completes. 为此,您需要在动画完成后选择
:visible
/ :hidden
元素。 To do this, use the callback function parameter: 为此,请使用回调函数参数:
$(".OffersContainer > span").click(function() {
this.clickCount = (this.clickCount || 0) + 1
var command = this.clickCount % 3 === 0 ? 'slideToggle' : 'slideDown';
$(this).siblings(this.clickCount % 3 === 1 ? "div:lt(3)" : "div:gt(0)")[command](function() {
$('.pan-box').filter(':visible').addClass("visible-divs");
$('.pan-box').filter(':hidden').removeClass("visible-divs");
});
});
As an aside, what's the point of changing a class on a hidden element? 顺便说一句,更改隐藏元素上的类有什么意义? By definition the effect won't be seen.
根据定义,效果将不会被看到。 You can just use the
:hidden
selector alone if you want to know which elements are hidden 如果您想知道哪些元素被隐藏,您可以单独使用
:hidden
选择器
If you do not want to wait for animation to finish, since you already know which options to hide or show, than you can use this code: 如果您不想等待动画完成,因为您已经知道要隐藏或显示哪些选项,您可以使用此代码:
$(".OffersContainer > div:gt(0)").hide(); $(".OffersContainer > span").click(function() { this.clickCount = (this.clickCount || 0) + 1 var command = this.clickCount % 3 === 0 ? 'slideToggle' : 'slideDown'; $(this).siblings(this.clickCount % 3 === 1 ? "div:lt(3)" : "div:gt(0)")[command](); console.log(this.clickCount % 3 * 3 - 1); $('.pan-box:lt(' + (this.clickCount % 3 * 3) + ')').addClass("visible-divs"); $('.pan-box:gt(' + (this.clickCount % 3 * 3) + ')').removeClass("visible-divs"); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="OffersContainer"> <div class='pan-box'>A</div> <div class='pan-box'>B</div> <div class='pan-box'>C</div> <div class='pan-box'>D</div> <div class='pan-box'>E</div> <span>Show more</span> </div>
Also on JSFiddle playground . 也在JSFiddle操场上 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.