在纯JS中单击时更改元素的颜色

时间:2016-06-12 14:14:49

标签: javascript

我有以下JS代码:

<div> item1 </div>
<div> item2 </div>
<div> item3 </div>

var x = document.querySelectorAll('div');

for(var i = 0; i < x.length; i++){
  x[i].addEventListener("click", function (){
    for(var i = 0; i < x.length; i++){
      if(x[i].style.color === ""){
        x[i].style.color = "red"
      } else {
        x[i].style.color = ""
      }
    }
 });
}

我想在点击每个项目时更改颜色,而是在所有项目上更改颜色。如何更改颜色,仅限于单击的元素?

2 个答案:

答案 0 :(得分:1)

您正在遍历处理程序中的所有<div>。一个更简单的方法是:

for(var i = 0; i < x.length; i++) {
  if (x[i] !== this) {
    x[i].style.color = "";
  }
}
if (this.style.color === "red") {
  this.style.color = "";
} else {
  this.style.color = "red"
}

在这种情况下,this指的是被点击的元素。

答案 1 :(得分:0)

不是循环遍历所有div并将侦听器附加到它们,而是只向窗口添加一个侦听器,如果它是div,则更改其颜色。

window.addEventListener('click', function(event) {
    const target = event.target; // what you clicked on
    if(target.tagName !== 'DIV') {
        return; // not a <div>, stop the function
    }

    const color = target.style.color;
    target.style.color = color? '' : 'red'; // color is set then clear it, otherwise set to 'red'
});

或者:

const divs = document.querySelectorAll('div');
Array.from(divs).forEach(div => {
    div.addEventListener('click', changeColor);
});

function changeColor() {
    let color = this.style.color;
    this.style.color = color? '' : 'red';
}

此外,您需要将Javascript代码包装在<script> /* JS here */ </script>代码中。