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

给容器添加的类无法移除,重复点击同一文本时类不消失如何解决?

问题根因

你当前的代码执行逻辑存在顺序问题:每次点击事件触发后,都会先把所有.in-cont元素的red类全部移除,再对点击目标的父元素执行toggle操作。此时父元素的red类已经被提前清空,toggle只会触发添加逻辑,自然无法实现取消选中的效果。

可行解决方案

不需要修改类的绑定位置,只需要调整判断逻辑的执行顺序:先记录当前点击项的激活状态,再清空所有激活状态,最后根据之前记录的状态决定是否给当前项添加激活类,即可实现点击选中、重复点击取消的效果。

修改后的JavaScript代码

const contain = document.querySelector('.contain');
const inConts = document.querySelectorAll('.in-cont');

contain.addEventListener('click', e => {
  // 仅当点击的是txt元素时执行逻辑
  if (e.target.classList.contains('txt')) {
    const currentCont = e.target.parentElement;
    // 先记录当前容器是否已经是激活状态
    const isCurrentActive = currentCont.classList.contains('red');
    // 清空所有容器的激活类
    for (const inCont of inConts) {
      inCont.classList.remove('red');
    }
    // 如果之前未激活,现在添加激活类;如果之前已激活,清空后就不再添加,实现取消效果
    if (!isCurrentActive) {
      currentCont.classList.add('red');
    }
  }
});
逻辑说明
  • 点击非文本区域时不做任何操作
  • 点击文本时先判断当前项是否已经是选中状态
  • 清空所有选中状态后,只有当前项之前未选中时才添加选中类,之前已选中的就保持未选中状态,完美实现单选+点击取消的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:15:04