addEventListener单击时,选择不“this”
addEventListener on click, choose not `this`
我有一个带有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
类。我该怎么做这个把戏?
下面是一个例子。
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);
}
演示
由于您只有一个活动类要设置,您可以像下面这样更改代码,
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);
}
演示
这是您的固定jsFiddle:
我刚刚添加了一个函数来访问您缓存的选项卡,并删除以前选择的,然后点击应用新的类。
var tabs = document.getElementsByClassName('tab');
function changeSelectedTab(tabEl) {
for (var t = 0; t < tabs.length; t++) {
tabs[t].className = 'tab';
};
tabEl.className += ' active';
}
for (var t = 0; t < tabs.length; t++) {
tabs[t].addEventListener('click', function(){
changeSelectedTab(this);
}, 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>
相关文章:
- $(this)正在提醒jquery中以前选择的值
- addEventListener单击时,选择不“this”
- 使用THIS比使用选择器更有效吗
- 将jQuery选择器与“this”相结合
- 正在获取$this的选择器
- 在Jquery中将$(this)与css类选择器一起使用
- 如何选择 $(this) 之后的下一个元素
- Jquery $this属性选择器是否包含单词
- 在新对象参数中使用“this”选择器
- 下拉选择将重置文本字段 onchange=“this.form.submit();”
- 如何使用“this”作为选择器的一部分
- 如何在 jQuery 中使用“this”的子元素作为选择器
- jQuery $(this) 伪选择器
- 如何在 JQuery 中使用带有“this”的相邻同级选择器
- jQuery两个不同的选择器,但根据哪一个定义$(this)
- 比较$this选择器和JQuery
- 如果this()选择器在函数中使用,它将引用哪个选择器(jQuery)
- 如何使$(this)选择器专注于当前元素?
- 使用THIS选择当前元素的特定子元素
- jQuery插件参数中的$(this)选择器指针