Javascript 类列表未按预期工作
Javascript classlist not working as expected
我只想对一个元素再次调用 classList。代码的前半部分应该影响带有 class 'btn' 的所有元素。后半部分应该只影响具有 'data-test' 属性的所有元素。
为什么带有 'data-test' 属性的元素没有接受具有 '.btn' class 的处理?他们应该将 'selected' 和 'bar' classes 切换到它们,但只将 'bar' class 切换到它们(JSFiddle 提供)。
HTML
<button class="btn">Button</button>
<button class="btn">Button</button>
<button class="btn" data-test="button">Button</button>
<button class="btn" data-test="button">Button</button>
JS
// First half
var btn = document.querySelectorAll('.btn');
for (var i = 0; i < btn.length; i++) {
btn[i].onclick = function() {
this.classList.toggle('selected');
}
}
// Second half
var items = document.querySelectorAll('[data-test]');
for (var f = 0; f < items.length; f++) {
items[f].onclick = function() {
this.classList.toggle('bar');
}
}
https://jsfiddle.net/jstn/uxdb8836/
非常感谢您的帮助谢谢!
这是因为您正在覆盖处理程序。一个元素只能有一个分配给 onclick
属性.
的处理程序
而是使用 .addEventListener()
绑定处理程序。
var btn = document.querySelectorAll('.btn');
for (var i = 0; i < btn.length; i++) {
btn[i].addEventListener("click", function() {
this.classList.toggle('selected');
}, false);
}
var items = document.querySelectorAll('[data-test]');
for (var f = 0; f < items.length; f++) {
items[f].addEventListener("click", function() {
this.classList.toggle('bar');
}, false);
}
.selected {
background-color: orange;
}
<button class="btn">Button</button>
<button class="btn">Button</button>
<button class="btn" data-test="button">Button</button>
<button class="btn" data-test="button">Button</button>
旁注,您可以重用这些函数以提高内存效率。
function btnHandler() {
this.classList.toggle('selected');
}
function testHandler() {
this.classList.toggle('bar');
}
var btn = document.querySelectorAll('.btn');
for (var i = 0; i < btn.length; i++) {
btn[i].addEventListener("click", btnHandler, false);
}
var items = document.querySelectorAll('[data-test]');
for (var f = 0; f < items.length; f++) {
items[f].addEventListener("click", testHandler, false);
}
我只想对一个元素再次调用 classList。代码的前半部分应该影响带有 class 'btn' 的所有元素。后半部分应该只影响具有 'data-test' 属性的所有元素。
为什么带有 'data-test' 属性的元素没有接受具有 '.btn' class 的处理?他们应该将 'selected' 和 'bar' classes 切换到它们,但只将 'bar' class 切换到它们(JSFiddle 提供)。
HTML
<button class="btn">Button</button>
<button class="btn">Button</button>
<button class="btn" data-test="button">Button</button>
<button class="btn" data-test="button">Button</button>
JS
// First half
var btn = document.querySelectorAll('.btn');
for (var i = 0; i < btn.length; i++) {
btn[i].onclick = function() {
this.classList.toggle('selected');
}
}
// Second half
var items = document.querySelectorAll('[data-test]');
for (var f = 0; f < items.length; f++) {
items[f].onclick = function() {
this.classList.toggle('bar');
}
}
https://jsfiddle.net/jstn/uxdb8836/
非常感谢您的帮助谢谢!
这是因为您正在覆盖处理程序。一个元素只能有一个分配给 onclick
属性.
而是使用 .addEventListener()
绑定处理程序。
var btn = document.querySelectorAll('.btn');
for (var i = 0; i < btn.length; i++) {
btn[i].addEventListener("click", function() {
this.classList.toggle('selected');
}, false);
}
var items = document.querySelectorAll('[data-test]');
for (var f = 0; f < items.length; f++) {
items[f].addEventListener("click", function() {
this.classList.toggle('bar');
}, false);
}
.selected {
background-color: orange;
}
<button class="btn">Button</button>
<button class="btn">Button</button>
<button class="btn" data-test="button">Button</button>
<button class="btn" data-test="button">Button</button>
旁注,您可以重用这些函数以提高内存效率。
function btnHandler() {
this.classList.toggle('selected');
}
function testHandler() {
this.classList.toggle('bar');
}
var btn = document.querySelectorAll('.btn');
for (var i = 0; i < btn.length; i++) {
btn[i].addEventListener("click", btnHandler, false);
}
var items = document.querySelectorAll('[data-test]');
for (var f = 0; f < items.length; f++) {
items[f].addEventListener("click", testHandler, false);
}