You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更高效编写实现点击切换盒子背景色的JavaScript代码?

优化点击切换盒子背景色的JavaScript代码

需求说明

点击盒子时将其背景色改为绿色,再次点击恢复初始状态。现有代码可实现功能,但需更高效的JavaScript编写方式。

原有代码

HTML

<div class="container">
  <div class="box first"></div>
  <div class="box second"></div>
  <div class="box third"></div>
</div>

CSS

.colors {
  background: green;
}

原有JavaScript

const first = document.querySelector(".first");
const second = document.querySelector(".second");
const third = document.querySelector(".third");

first.addEventListener("click", () => {
  first.classList.toggle("colors");
});

second.addEventListener("click", () => {
  second.classList.toggle("colors");
});

third.addEventListener("click", () => {
  third.classList.toggle("colors");
});

优化方案

方案1:批量选择元素 + 统一绑定事件

通过querySelectorAll一次性获取所有.box元素,再用forEach遍历绑定点击事件,避免重复编写相同逻辑:

const boxes = document.querySelectorAll('.box');
boxes.forEach(box => {
  box.addEventListener('click', () => {
    box.classList.toggle('colors');
  });
});

方案2:事件委托(更优,支持动态元素)

利用事件冒泡机制,只给父容器绑定一个点击事件,通过事件对象判断触发源是否为目标盒子,这种方式性能更高,且后续动态添加的.box元素无需额外绑定事件即可生效:

const container = document.querySelector('.container');
container.addEventListener('click', (e) => {
  if(e.target.classList.contains('box')){
    e.target.classList.toggle('colors');
  }
});

方案对比

  • 批量绑定:代码简洁直观,适合固定数量的静态元素场景。
  • 事件委托:仅需一个事件监听,内存占用更低,同时兼容动态新增的盒子元素,扩展性更强。

内容的提问来源于stack exchange,提问作者zcode97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:31:02