javascript - 从所有节点列表元素中删除样式并仅添加到单击的元素 Vanilla JS

标签 javascript loops foreach nodelist

我有多个 div,单击时会添加边框并将它们稍微放大。我使用 foreach 循环遍历所有元素,然后单击时删除每个元素的边框和缩放属性,但单击的元素除外,我向其中添加边框和缩放。 我的代码是完全合乎逻辑的,应该可以工作,但由于某种原因我似乎无法理解,它只将样式应用于单击的元素,而不是从其余元素中删除(就像我的代码所说的那样)。

JS

    document.querySelectorAll('.projcolorpick div').forEach(el => {
            el.onclick = (e) => {
                el.style.border = "none"
                el.style.transform  = "scale(1)"
                e.target.style.border = "2px solid #fff"
                e.target.style.transform = "scale(1.2)" 
                projcolor = e.target.style.background   
            }
        }) 
     } 

最佳答案

尝试一下这样的事情...每个元素都需要一个 id 属性才能工作(过滤器部分 - 如果有一个唯一的属性...)

    const list = Array.from(document.querySelectorAll('.projcolorpick div'));
    list.forEach(el => {
            el.addEventListener('click', (e) => {
                //code that affects the element you click on
                el.style.border = "2px solid #fff"
                el.style.transform = "scale(1.2)" 
                projcolor = e.target.style.background;
                list.filter(x=>x.id!=el.id).forEach(otherEl=>{
                    //code that affects the other elements you didn't click on
                    otherEl.style.border = "none"
                    otherEl.style.transform  = "scale(1)"
                });
            });
        }); 
     
    ```
edit:
fixed some typos.

关于javascript - 从所有节点列表元素中删除样式并仅添加到单击的元素 Vanilla JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63627508/

相关文章:

javascript - 为什么 Array.prototype.forEach 设计为跳过未定义的值?

javascript - Fabric.js : How to observe object:scaling event and update properties dynamically?

javascript - 如何将JQuery find 和each 一起使用?

javascript - 更改 html 中链接点击的占位符

javascript - $rootScope 未使用 forEach 进行更新

php - 表行未更新

javascript - 使用 jwplayer 进行动态 rtmp 流传输

node.js - Node : Sending UDP packet on timer,无限循环

c# - 在 C# 中的方法内停止循环

javascript - 循环遍历 Google Places 评论数组并从回调函数获取值