首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Javascript中切换forEach子div类。(文本的bgcolor正在更改,而那些div的bgcolor则没有)

在Javascript中切换forEach子div类。(文本的bgcolor正在更改,而那些div的bgcolor则没有)
EN

Stack Overflow用户
提问于 2020-11-01 10:39:42
回答 1查看 85关注 0票数 0

大家好,

我有这个汉堡包菜单线,我想改变他们的颜色,当我点击它。我尝试使用addEventListener +切换类,对于那些div也使用简单的element.style.backgroundColor (我为所有的div添加了相同的类),但在这两种情况下都不起作用。虽然,文本的颜色在变化,但是那些div的背景色没有变化)。下面是密码。

非常感谢。

代码语言:javascript
复制
const hamburgerMenu = document.querySelector(".hamburger-menu");
const hamburgerMenuLines = document.querySelectorAll(".hamburger-menu div");

hamburgerMenu.addEventListener('click', () => {
  // (code to open menu fullscreen which works fine)
  hamburgerMenuLines.forEach((line) => {
    line.classList.toggle("changeHamburgerMenuLinesColor");
  });
});
代码语言:javascript
复制
.hamburger-menu div {
  width: 100%;
  height: 2px;
  border-radius: 30%;
  background-color: black;
  position: relative;
  margin-top: 11px;
}

.changeHamburgerMenuLinesColor {
  background-color: white;
  color: white;
}
代码语言:javascript
复制
<div class="hamburger-menu">
  <div>Text</div>
  <div>Text</div>
  <div>Text</div>
</div>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-01 10:47:46

问题是因为CSS specificity。当两个选择器对一个元素应用相同的样式时,具有更多特异性的选择器优先。

在您的示例中,.hamburger-menu div是比.changeHamburgerMenuLinesColor更具体的选择器,因此使用第一个选择器(即“黑色”)设置的背景色将应用于每个div元素。

要解决这个问题,您需要增加第二个选择器的特殊性。如下图所示,编写第二个选择器将使两个选择器的特异性相等,而后面按自上而下顺序排列的选择器将优先。

代码语言:javascript
复制
div.changeHamburgerMenuLinesColor {
   background-color: white;
   color: white;
}

提示:浏览器开发工具为调试此类问题提供了帮助。花点时间学习如何利用它们来发挥你的优势。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64630940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档