javascript - 单击时添加事件监听器,选择不是 `this`

标签 javascript

我有一个带有 addEventListener 函数的循环:

var tabs = document.getElementsByClassName('tab');

for (var t = 0; t < tabs.length; t++) {
  tabs[t].addEventListener('click', function(){
    this.className += ' active';
  }, false);
}

如您所见,我想在点击事件上将 .active 类名添加到我的 li 中。 而且,我想从其他 li 中删除 .active 类。我怎样才能做到这一点?

Here就是一个例子。

var tabs = document.getElementsByClassName('tab');

for (var t = 0; t < tabs.length; t++) {
  tabs[t].addEventListener('click', function(){
    this.className += ' active';
  }, false);
}
.tabs {
  display: inline-block;
  ul {
    list-style-type: none;
    li {
      cursor: pointer;
      float: left;
      padding: 10px 40px;
      background: #FDFDFD;
      &.active {
        background: #8F95B0;
        color: #FFF;
        border-top-left-radius: 5px;
        border-top-right-radius: 5px;
      }
    }
  }
}
<div class="tabs">
  <ul>
    <li class="tab active">Product Overview</li>
    <li class="tab">Specifications</li>
    <li class="tab">Related products</li>
  </ul>
</div>

最佳答案

首先尝试从所有元素中删除active类,

var tabs = document.getElementsByClassName('tab');

for (var t = 0; t < tabs.length; t++){
  tabs[t].addEventListener('click', function(){
    //~~~~~~~~~~~~~~~~~~~~~
    //select all the elements with class active
    Array.from(document.querySelectorAll(".active")).forEach(function(itm){
        itm.classList.remove("active")
    });
    //And remove the class active from it.
    //~~~~~~~~~~~~~~~~~~~~~
    this.classList.add('active');
  }, false);
}

DEMO

由于您只需要设置一个事件类,因此您可以更改如下代码,

var tabs = document.getElementsByClassName('tab');

for (var t = 0; t < tabs.length; t++){
  tabs[t].addEventListener('click', function(){
   document.querySelector(".active").classList.remove("active")
   this.classList.add('active');
  }, false);
}

DEMO

关于javascript - 单击时添加事件监听器,选择不是 `this`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37022987/

相关文章:

javascript - jQuery UI slider : multiple sliders with default values

javascript - 禁用下拉选项

javascript - `is` 初始化 polymer 组件的属性

javascript - Electron 应用程序在Spectron测试中打开多个窗口或进程

javascript - 我应该如何存储和检索英镑符号?

javascript - ajax 调用后图像不显示 [Symfony2]

javascript html文本过滤器/链接

javascript - 尝试从 Firefox 读取实时 HTTP header 报告

javascript - Sails.js index.ejs Controller 逻辑

javascript - gulp watch with babel 然后 pm2 restart