我指的是例子
// Get the container element
var btnContainer = document.getElementById("myDIV");
// Get all buttons with class="btn" inside the container
var btns = btnContainer.getElementsByClassName("btn");
// Loop through the buttons and add the active class to the current/clicked button
for (var i = 0; i < btns.length; i++) {
btns[i].addEventListener("click", function() {
var current = document.getElementsByClassName("active");
current[0].className = current[0].className.replace(" active", "");
this.className += " active";
});
}
.btn {
border: none;
outline: none;
padding: 10px 16px;
background-color: #f1f1f1;
cursor: pointer;
}
/* Style the active class (and buttons on mouse-over) */
.active, .btn:hover {
background-color: #666;
color: white;
}
<div id="myDIV">
<button class="btn">1</button>
<button class="btn active">2</button>
<button class="btn">3</button>
<button class="btn">4</button>
<button class="btn">5</button>
</div>
在此将活动类替换为 nil 时,current[0].className
的用法如下
current[0].className = current[0].className.replace(" active", "");
但是要添加类名,使用了this
关键字
this.className += " active";
为什么我不能添加如下的新类名
current[0].className += " active";
?
答案 0 :(得分:1)
因为 this
在您当前的上下文中是被点击的按钮。另一种方法是使用 e.target.classList.add('active');
,但在这样做之前,您应该像这样将 e
传递给回调函数参数
btns[i].addEventListener("click", function(e) {
var current = document.getElementsByClassName("active");
current[0].className = current[0].className.replace(" active", "");
e.target.classList.add('active');
});