javascript - addClass to parent 不工作

标签 javascript jquery html css

li 元素中有一个a。我想在用户点击 a 时将 current 类添加到相关的 li 中。但是,我不确定该怎么做。

$(".nav-link").on('click', function(e) {
  $(this).parent().toggleClass('current');
})
.nav-item.current {
  width: 300px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css" />
<ul class="nav nav-tabs" id="myTab" role="tablist">
  <li class="nav-item current">
    <a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Home</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" id="profile-tab" data-toggle="tab" href="#profile" role="tab" aria-controls="profile" aria-selected="false">Profile</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" id="contact-tab" data-toggle="tab" href="#contact" role="tab" aria-controls="contact" aria-selected="false">Contact</a>
  </li>
</ul>
<div class="tab-content" id="myTabContent">
  <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">Home</div>
  <div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">Profile</div>
  <div class="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">Contact</div>
</div>

我尝试使用切换,但当我再次单击链接时它会搞砸。请帮我。谢谢。

codepen - https://codepen.io/rae0724/pen/pZNQMK

出于某些原因,如果我需要检测 .nav-link 是否具有类 .active 的功能,那么只需添加 current 给家长上课?我有什么方法可以实现这一点?

最佳答案

查看更新后的函数

   $(".nav-link").on('click', function(e) {
      $(".current").removeClass('current');
      $(this).parent().addClass('current');
    })

我添加了 $(".current").removeClass('current'); 行。 您需要先从所有元素中删除当前类,然后在所需元素上再次添加它。

$(".nav-link").on('click', function(e) {
  $(".current").removeClass('current');
  $(this).parent().addClass('current');
})
.nav-item.current {
  width: 300px;
}
<link rel="stylesheet prefetch" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/js/bootstrap.min.js"></script>
<ul class="nav nav-tabs" id="myTab" role="tablist">
  <li class="nav-item current">
    <a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Home</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" id="profile-tab" data-toggle="tab" href="#profile" role="tab" aria-controls="profile" aria-selected="false">Profile</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" id="contact-tab" data-toggle="tab" href="#contact" role="tab" aria-controls="contact" aria-selected="false">Contact</a>
  </li>
</ul>
<div class="tab-content" id="myTabContent">
  <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">Home</div>
  <div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">Profile</div>
  <div class="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">Contact</div>
</div>

更新的答案(基于评论)

 $(".nav-link").on('click', function(e) {
      $(".current").removeClass('current');
      setTimeout(function() {
        $(".active").parent().addClass('current');
      }, 0);

    })

$(".nav-link").on('click', function(e) {
  $(".current").removeClass('current');
  setTimeout(function() {
    $(".active").parent().addClass('current');
  }, 0);

})
.nav-item.current {
  width: 300px;
}
<link rel="stylesheet prefetch" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/js/bootstrap.min.js"></script>
<ul class="nav nav-tabs" id="myTab" role="tablist">
  <li class="nav-item current">
    <a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Home</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" id="profile-tab" data-toggle="tab" href="#profile" role="tab" aria-controls="profile" aria-selected="false">Profile</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" id="contact-tab" data-toggle="tab" href="#contact" role="tab" aria-controls="contact" aria-selected="false">Contact</a>
  </li>
</ul>
<div class="tab-content" id="myTabContent">
  <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">Home</div>
  <div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">Profile</div>
  <div class="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">Contact</div>
</div>

关于javascript - addClass to parent 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51438745/

相关文章:

javascript - 搜索存储在同一目录中的 HTML 文件中的关键字

javascript - 为什么 IE 在文本输入中的插入符号位置不等于字符串索引?解决方法是什么?

javascript - 仅当在网站中到达该部分时才显示效果

javascript - 使用 concat 助手渲染组件

javascript - 如何使用 Chrome 控制台更改颜色

php - 在symfony2中填充另一个选择的 "change"事件的选择字段并使其可以提交

jquery - 如何制作下面给出的节目类型的 ListView ?

html - 我的整个网站在 Firefox 和 Opera 中是不同的颜色

jQuery Modal + .show() 和 .hide()

html - 如何使 EmailId 验证器忽略 Angular 6 中的大小写?