如何使用jQuery更改元素的类>

How can I change the class of an element with jQuery>

提问人:Banshee 提问时间:3/6/2011 最后编辑:double-beepBanshee 更新时间:12/26/2020 访问量:151493

问:

我有一个 JavaScript 函数,如下所示:

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");
  }
}

这将由以下代码触发(从 :$(document).ready(function () {})

$('#extraFilterDropDownButton').click(function() {
    if ($('#F_ShowF').val() == 1) {
        $('#F_ShowF').val(0);
    } else {
        $('#F_ShowF').val(1);
    }

    UpdateFilterView();
});

这个 HTML 很简单:

<div id="divCategoryFilter">...</div> 
<div style="clear:both;"></div>
<div id="extraFilterDropDownButton" class="showhideExtra_down">&nbsp;</div>

我有两个问题:

  1. 当面板被隐藏并按下 div 按钮 () 时,页面的左上角将闪烁,然后面板将向下动画化。extraFilterDropDownButton

  2. 当面板显示时,我们按下 div 按钮,面板将 ,但即使我们在脚本中设置它,该按钮也不会更改为正确的类?hide('slow')UpdateFilterView

将鼠标悬停时,将在按钮上设置正确的类,这是使用以下代码设置的:

$("#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');
    }
  });
JavaScript HTML jQuery

评论

3赞 rsp 3/6/2011
只是一个建议:如果你发布了一个最小的代码示例来证明你的问题,最好使用 jsFiddle,你的问题可能会有更好的机会在这里得到回答。
0赞 Jeremy Battle 3/6/2011
总而言之...您是否只是要求一个按钮来显示隐藏的 div,然后在显示 div 时隐藏该 div?
1赞 T J 10/2/2014
“但按钮不会更改为正确的类” - 哪个是正确的类..?“当面板被隐藏时” - 我不明白你说的面板是什么意思..?

答:

18赞 Seth 3/6/2011 #1

使用 jQuery 的

$(this).addClass('showhideExtra_up_hover');

$(this).addClass('showhideExtra_down_hover');
214赞 patrick 4/3/2012 #2

要完全设置一个类,而不是添加或删除一个类,请使用以下命令:

$(this).attr("class","newclass");

这样做的好处是,您将删除可能在那里设置的任何类,并将其重置为您喜欢的方式。至少在一种情况下这对我有用。

评论

0赞 T J 10/2/2014
好的,但是OP也在使用,那么这应该如何解决这个问题..?.attr('class', "showhideExtra_down")
0赞 Falke Design 1/17/2019
答案是正确的! .attr('class', “className”) 是正确的。
9赞 nextzeus 8/4/2014 #3
<script>
$(document).ready(function(){
      $('button').attr('class','btn btn-primary');
}); </script>

评论

4赞 Reporter 8/4/2014
我认为当您为您的意图添加一些解释时,这对 OP 和进一步的访问者会更有帮助。
0赞 Catto 6/7/2017
此代码示例有助于清楚地了解如何通过使用 2 个或更多类之间的空格来添加它们。
6赞 plgrenier 7/12/2016 #4

我喜欢写一个小插件来让事情更干净:

$.fn.setClass = function(classes) {
    this.attr('class', classes);
    return this;
};

这样你就可以简单地做

$('button').setClass('btn btn-primary');