javascript - 单击时将活动类切换到按钮
问题描述
编写当前代码后,我可以选择带有 mobile__CTA--btn 类的第一个按钮,并在单击时切换“活动”类。当我单击下一个按钮尝试切换“活动”类时,第一个按钮未分配该类,但我无法将“活动”类分配给下一个按钮。有什么建议么?
const callToActionBtns = document.querySelectorAll(".mobile__CTA--btn");
callToActionBtns.forEach((btn) => {
btn.addEventListener("click", (e) => {
const currentBtn =
e.target.parentElement.querySelector(".mobile__CTA--btn");
currentBtn.classList.toggle("active");
});
});
.active {
color : white;
border-bottom : 5px solid $purple;
padding-bottom : 1rem;
}
<div class="mobile__CTA">
<button id="overview-btn" class="mobile__CTA--btn"> OVERVIEW </button>
<button id="structure-btn" class="mobile__CTA--btn"> STRUCTURE </button>
<button id="surface-btn" class="mobile__CTA--btn"> SURFACE </button>
</div>
解决方案
这:
const currentBtn =
e.target.parentElement.querySelector(".mobile__CTA--btn");
currentBtn.classList.toggle("active");
获取父div
容器,找到该类的第一个元素mobile__CTA--btn
(即第一个按钮)并切换该类。
相反,您应该循环callToActionBtns
并删除 class active
,然后active
为事件目标切换 class :
const callToActionBtns = document.querySelectorAll(".mobile__CTA--btn");
callToActionBtns.forEach((btn) => {
btn.addEventListener("click", (e) => {
callToActionBtns.forEach(f => f.classList.remove('active'));
e.target.classList.toggle("active");
});
});
.active {
color: white;
border-bottom: 5px solid $purple;
padding-bottom: 1rem;
}
<div class="mobile__CTA">
<button id="overview-btn" class="mobile__CTA--btn">OVERVIEW</button>
<button id="structure-btn" class="mobile__CTA--btn">STRUCTURE</button>
<button id="surface-btn" class="mobile__CTA--btn">SURFACE</button>
</div>
如果您希望能够取消切换当前按钮,只需if
在循环时添加一条语句,检查当前循环通过的项目是否是目标元素:
const callToActionBtns = document.querySelectorAll(".mobile__CTA--btn");
callToActionBtns.forEach((btn) => {
btn.addEventListener("click", (e) => {
callToActionBtns.forEach(f => f != e.target ? f.classList.remove('active') : '');
e.target.classList.toggle("active");
});
});
.active {
color: white;
border-bottom: 5px solid $purple;
padding-bottom: 1rem;
}
<div class="mobile__CTA">
<button id="overview-btn" class="mobile__CTA--btn">OVERVIEW</button>
<button id="structure-btn" class="mobile__CTA--btn">STRUCTURE</button>
<button id="surface-btn" class="mobile__CTA--btn">SURFACE</button>
</div>
推荐阅读
- mysql - mysql中两个日期之间的可用性
- git - 如何临时断开 git 工作目录?
- ruby-on-rails - 无法使 Highcharts 以 pdf 格式显示
- java - CsrfGuard 的问题。尽管从官方网站配置,csrf 抛出一个问题
- reactjs - 是否可以创建 react native 库并在新的 react native 项目中引用而不上传到 npm
- c# - 用于 Unity 的 Tesseract
- java - 为什么这个 java 代码的输出是 6 和 21?
- c# - 如何在实体框架中同时调用表值和标量参数的存储过程
- javascript - 如何在回调函数中访问“this”的两个上下文?
- python-3.x - matplotlib pyplot 图从 x0 y0 开始