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

如何用20行以内代码实现多段落点击切换激活类并更改样式

精简版解决方案(20行内JS实现标签切换)

嘿,我帮你把代码彻底精简了,不管是JS还是CSS都砍掉了大量冗余,功能完全符合你的需求——点击任意<p>标签时,给它加上对应的xxx-active类,同时移除其他所有标签的-active类。

第一步:优化CSS(告别重复代码)

原来的CSS每个类都写一遍基础样式和-active样式,完全没必要,直接合并统一处理:

/* 所有目标p标签的基础样式 */
.one, .two, .three, .four, .five, .six, .seven, .eight {
  color: rgb(11, 28, 47);
  background-color: rgb(255, 255, 255);
  cursor: pointer; /* 加个鼠标指针提示,提升交互体验 */
  margin: 5px 0; /* 可选:加个间距让布局更舒服 */
}

/* 所有-active类的统一样式 */
.one-active, .two-active, .three-active, .four-active,
.five-active, .six-active, .seven-active, .eight-active {
  color: rgb(255, 255, 255);
  background-color: rgb(11, 28, 47);
}

第二步:精简JS(仅8行代码搞定)

不用一个个获取元素、写单独的事件函数,用批量选择和循环就能搞定:

// 一次性选中所有需要的p标签
const tabs = document.querySelectorAll('.one, .two, .three, .four, .five, .six, .seven, .eight');

// 给每个标签绑定点击事件
tabs.forEach(tab => {
  tab.addEventListener('click', () => {
    // 移除所有标签的-active类
    tabs.forEach(t => t.classList.remove(`${t.classList[0]}-active`));
    // 给当前点击的标签添加对应的-active类
    tab.classList.add(`${tab.classList[0]}-active`);
  });
});

HTML部分(无需修改,保持原样即可)

<p class="one">COSA È</p>
<p class="two">COSA È</p>
<p class="three">COSA È</p>
<p class="four">COSA È</p>
<p class="five">COSA È</p>
<p class="six">COSA È</p>
<p class="seven">COSA È</p>
<p class="eight">COSA È</p>

补充说明

  • 这里假设每个<p>标签只有一个基础类(比如one、two),如果有多个类,可以调整classList[0]为你需要的基础类名称,或者给所有目标标签加一个共同的类(比如tab-item),这样querySelectorAll可以直接写.tab-item,更简洁。
  • 如果愿意统一用一个active类代替xxx-active,CSS会更简单,JS也可以改成移除active类再添加,这样扩展性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:18:13