css 用JavaScript代码改变背景颜色

gzszwxb4  于 2023-08-08  发布在  Java
关注(0)|答案(2)|浏览(145)

我想写一个JavaScript代码,当我点击按钮时,它会改变我点击的所有按钮的背景颜色(类是nav-bckStyle),当我再次点击它们时,它会返回到原始的背景颜色(类是nav-bck)。但是,当我用forEach()创建一个函数时,当我点击img时,它只改变img的背景颜色,而不改变按钮的颜色。同样,当我点击文本时,它只会改变文本的背景颜色。我应该如何编码呢?
超文本标记语言

<div id="nav">
        <nav>
            <div class="navGroup nav-bck">
                <button class="category-button" data-group="groupA">
                    <img src="/3th/img/rice-kimchi.png" alt="rice and kimchi">
                    <h4>lorem</h4>
                </button>
            </div>
            <div class="navGroup nav-bck">
                <button class="category-button" data-group="groupB">
                    <img src="/3th/img/fruit-vegetable.png" alt="fruit and vegetable">
                    <h4>lorem</h4>
                </button>
            </div>
            <div class="navGroup nav-bck">
                <button class="category-button" data-group="groupC">
                    <img src="/3th/img/meat-seafood.png" alt="meat and seafood">
                    <h4>lorem</h4>
                </button>
            </div>
            <div class="navGroup nav-bck">
                <button class="category-button" data-group="groupD">
                    <img src="/3th/img/frozenFood-snack.png" alt="frozen-food and snack">
                    <h4>lorem</h4>
                </button>
            </div>
            <div class="navGroup nav-bck">
                <button class="category-button" data-group="groupE">
                    <img src="/3th/img/etc.png" alt="etc">
                    <h4>lorem</h4>
                </button>
            </div>
        </nav>
</div>

字符串
CSS格式

#nav nav {
  display: flex;
  flex-flow: row wrap;
  color: #fff;
  padding: 0 10px;
}
.nav-bck{
  background: rgb(1, 167, 1);
}
.nav-bckStyle{
  background: rgb(1, 107, 1);
}
#nav nav .navGroup {
  flex-grow: 1;
}
#nav nav .navGroup img {
  padding: 5px;
  height: 60px;
}
#nav nav .navGroup h4 {
  display: inline;
  vertical-align: middle;
  margin: 0 10px;
}
#nav nav button {
  background: transparent; 
  padding: 5px 10px;
  border: none;
}


JS

categoryButtons.forEach(button => {
        button.addEventListener('click', () => {
            const navGroup = this.documentElement.querySelectorAll('.navGroup');
            console.log(navGroup);
    
            function navStyle(event){
                // navGroup의 class인 nav-bck 제거
                navGroup.forEach((e) => {
                    e.classList.remove('nav-bck');
                });
    
                // click한 navGroup에 nav-bckStyle class 추가
                event.target.classList.add('nav-bckStyle');
            }
    
            // 클릭 시 실행
            navGroup.forEach((e) => {
                e.addEventListener('click', navStyle);
            });
        })
    })

alen0pnh

alen0pnh1#

将click事件添加到button元素,然后在该事件中,将另一个click事件添加到'.navGroup' div元素。将click事件侦听器直接添加到具有类'navGroup'的div元素

const navGroups = document.querySelectorAll('.navGroup');

navGroups.forEach((group) => {
    group.addEventListener('click', () => {
       
        if (group.classList.contains('nav-bck')) {
            group.classList.remove('nav-bck');
            group.classList.add('nav-bckStyle');
        }
        
        else if (group.classList.contains('nav-bckStyle')) {
            group.classList.remove('nav-bckStyle');
            group.classList.add('nav-bck');
        }
    });
});

字符串

jgzswidk

jgzswidk2#

您正在从.navGroup匹配的元素中删除nav-bck类,但您正在将其添加到您单击的元素(例如图像或4级标题)。
您应该将类添加到.navGroup匹配的元素中。使用the closest methodtarget搜索DOM。

相关问题