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

点击Div无法取消高亮:需实现点击元素切换高亮状态

实现点击切换Div高亮状态

没问题!我帮你实现这个点击切换高亮的功能,下面是完整的可运行代码,逻辑清晰还容易维护:

HTML结构

我给每个控制按钮加了data-targets属性,用来明确指定它要控制的Div选择器,这样后续修改控制目标时不用动JS代码,更灵活:

<div class="control-btn" data-targets=".d-rec">A</div>
<div class="control-btn" data-targets=".d-rec, .c-rec">B</div>
<div class="control-btn" data-targets=".l-rec">C</div>

<div class="d-rec">第一个Div</div>
<div class="c-rec">第二个Div</div>
<div class="l-rec">第三个Div</div>

CSS样式

定义高亮的视觉效果,你可以根据自己的UI需求调整颜色、边框等:

/* 高亮样式 */
.highlight {
  background-color: #ffeb3b;
  border: 2px solid #fbc02d;
  padding: 8px;
  margin: 4px 0;
}

/* 控制按钮的样式,让点击区域更明显 */
.control-btn {
  display: inline-block;
  padding: 6px 12px;
  margin: 5px;
  background-color: #e0e0e0;
  cursor: pointer;
  border-radius: 4px;
  user-select: none;
}

JavaScript逻辑

核心用classList.toggle()方法实现切换,它会自动判断元素是否有高亮类,有就移除,没有就添加,完美符合你的需求:

// 获取所有控制按钮
const controlBtns = document.querySelectorAll('.control-btn');

// 给每个按钮绑定点击事件
controlBtns.forEach(btn => {
  btn.addEventListener('click', () => {
    // 拆分按钮对应的目标选择器
    const targetSelectors = btn.dataset.targets.split(', ');
    
    // 遍历每个选择器,找到对应元素并切换高亮类
    targetSelectors.forEach(selector => {
      const targetElements = document.querySelectorAll(selector);
      targetElements.forEach(el => {
        el.classList.toggle('highlight');
      });
    });
  });
});

代码说明

  • data-targets属性:把控制逻辑和HTML结构解耦,比如想让B按钮控制第二个和第三个Div,直接改属性为.c-rec, .l-rec就行,不用修改JS。
  • classList.toggle():这是实现切换的关键API,省去了手动判断类是否存在的麻烦,代码更简洁。
  • 事件绑定:用forEach给每个按钮绑定点击事件,逻辑清晰易懂,新手也能快速理解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:39:28