使用 bootstrap 和 jQuery 切换 class

Toggle class with bootstrap and jQuery

如果有人可以提供帮助,我会就 jquery 和 bootstrap 的使用提出一些建议。

我有以下HTML

 <ul class="nav nav-pills nav-fill">
    <li class="nav-item">
        <a class="nav-link" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">Our Services</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">Our Venues</a>
    </li>
</ul>

然后我有以下jquery

 $('ul.nav li a').click(function (e) {
    $('ul.nav li.active').removeClass('active')
    $(this).parent('li').addClass('active')
 })

现在我想要创建的是单击导航-link 时的活动状态,它会移动到正在 selected 的任何选项卡,这可以做到但不能做到如果您 select 一个 link 打开并且 select 相同关闭,是否删除活动?

有人可以帮忙吗?

如果您想添加和删除具有相同 click 事件的 class(第一次单击添加 class,然后下一次删除 class) ,你可以使用 toggleClass 来实现它:

$('ul.nav li a').click(function (e) {

  // Select the parent li
  var el = $(this).parent();

  // Remove the class to the other li.active elements
  $('ul.nav li.active').not(el).removeClass('active');

  // Toggle the class to the current element: add the class if not present, removes the class if present
  el.toggleClass('active');

});

有关 toggleClass 的更多信息,请访问 jQuery 网站。

希望对您有所帮助!

核心问题是您首先删除 class,然后添加 class。如果你已经有 class 然后添加和删除它,当然它仍然会在那里。因此,为了删除 class 如果它已经存在,您必须编写如下条件语句:

    $(document).ready(function(){
   $('ul.nav li a').click(function (e) {
     if($(this).parent('li').hasClass('active')){
       $('ul.nav li.active').removeClass('active')
     }

     else {
       $('ul.nav li.active').removeClass('active')
       $(this).parent('li').addClass('active')
     }
 })
});

或者您可以使用 jQuery 的开关 class

感谢这两个回复,都达到了我想要的结果,我感谢你们提供的信息和详细的回复,这有助于我理解为什么我没有达到预期的结果。