简体   繁体   English

在jquery中添加和删除类

[英]Adding and removing class in jquery

I'm trying to show/hide my div elements using slidetoggle and slideDown . 我正在尝试使用slidetoggleslideDown显示/隐藏我的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");
    });
});

Updated fiddle 更新了小提琴

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM