I have a JavaScript function that looks like this:
function UpdateFilterView() {
 if (_extraFilterExists) {
 if ($('#F_ShowF').val() == 1) {
 $('#extraFilterDropDownButton').attr('class', "showhideExtra_up");
 $('#extraFilterDropDownButton').css("display", "block");
 if ($('#divCategoryFilter').css("display") == 'none') {
 $('#divCategoryFilter').show('slow');
 }
 return;
 } else {
 if ($('#divCategoryFilter').css("display") == 'block') {
 $('#divCategoryFilter').hide('slow');
 }
 $('#extraFilterDropDownButton').css("display", "block");
 $('#extraFilterDropDownButton').attr('class', "showhideExtra_down");
 return;
 }
 } else {
 if ($('#divCategoryFilter').css("display") != 'none') {
 $('#divCategoryFilter').hide('fast');
 }
 $('#extraFilterDropDownButton').css("display", "none");
 }
}
This will be triggered by the following code (from within the $(document).ready(function () {}):
$('#extraFilterDropDownButton').click(function() {
 if ($('#F_ShowF').val() == 1) {
 $('#F_ShowF').val(0);
 } else {
 $('#F_ShowF').val(1);
 }
 UpdateFilterView();
});
The HTML for this is easy:
<div id="divCategoryFilter">...</div> 
<div style="clear:both;"></div>
<div id="extraFilterDropDownButton" class="showhideExtra_down"> </div>
I have two problems with this:
When the panel is hidden and we press the div button (
extraFilterDropDownButton) the upper left part of the page will flicker and then the panel will be animated down.When the panel is shown and we press the div button the panel will
hide('slow'), but the button will not change to the correct class even when we set it in theUpdateFilterViewscript?
The correct class will be set on the button when hovering it, this is set with the following code:
$("#extraFilterDropDownButton").hover(function() {
 if ($('#divCategoryFilter').css("display") == 'block') {
 $(this).attr('class', 'showhideExtra_up_hover');
 } else {
 $(this).attr('class', 'showhideExtra_down_hover');
 }
 },
 function() {
 if ($('#divCategoryFilter').css("display") == 'block') {
 $(this).attr('class', 'showhideExtra_up');
 } else {
 $(this).attr('class', 'showhideExtra_down');
 }
 });
 - 
 3Just a suggestion: your question might have a better chance getting answered here if you posted a minimal code example that would demonstrate your problem, preferably using jsFiddle.rsp– rsp2011年03月05日 16:51:15 +00:00Commented Mar 5, 2011 at 16:51
 - 
 To summarize...are you just asking for a button that will reveal a div that is hidden and then hide the div when its shown?Jeremy Battle– Jeremy Battle2011年03月05日 16:53:29 +00:00Commented Mar 5, 2011 at 16:53
 - 
 1"but the button will not change to the correct class" - which is the correct class..? "When the panel is hidden" - i don't understand what yo mean by panel..?T J– T J2014年10月02日 11:39:16 +00:00Commented Oct 2, 2014 at 11:39
 
4 Answers 4
To set a class completely, instead of adding one or removing one, use this:
$(this).attr("class","newclass");
Advantage of this is that you'll remove any class that might be set in there and reset it to how you like. At least this worked for me in one situation.
2 Comments
.attr('class', "showhideExtra_down") then how is this supposed to fix the issue..?Use jQuery's
$(this).addClass('showhideExtra_up_hover');
and
$(this).addClass('showhideExtra_down_hover');
 Comments
<script>
$(document).ready(function(){
 $('button').attr('class','btn btn-primary');
}); </script>
 I like to write a small plugin to make things cleaner:
$.fn.setClass = function(classes) {
 this.attr('class', classes);
 return this;
};
That way you can simply do
$('button').setClass('btn btn-primary');