JS如何定位被点击的div内的div

问题描述 投票:0回答:2

这是一种特殊情况:更改被单击元素的 CSS

如果我有一些像这样的div:



    <div class="parent">
        <div class="child"></div>
    </div>

     <div class="parent">
        <div class="child"></div>
    </div>


    

我知道我可以为每个父 div 分配一个函数,例如:

const parent = document.querySelectorAll('.parent');
if(parent.length){
   for (let l of parent){
      l.addEventListener('click', (e)=>{
        l.classList.toggle('visible')
      })
   }
}

但是当单击父级时,如何切换子级 div 的 .visible 类?或者添加visibility:visible到子div样式。

非常感谢!

javascript css click addeventlistener
2个回答
0
投票

您可以继续使用

querySelector
,但这次从父元素开始搜索,而不是从文档开始搜索。

parent.addEventListener("click", (event) => {
  // `event.currentTarget` gives you element that event listener attached to.
  // it's not necessary, but I prefer to do this way.
  const child = event.currentTarget.querySelector(".child");
  // since `querySelector` can return `null`, it's never bad thing to check
  // using optional chaining is also a solution
  if (child === null) return;
  child.classList.toggle("visible");
});

一些建议 - 最好使用按钮作为交互元素,因为 div 没有任何语义,并且不会在辅助功能树中显示为交互元素。而且它不能用键盘激活。这会使某些用户无法访问您的元素。使用按钮只需要更改 HTML,并且会使其更加可用。


0
投票

您可以为此使用 e.target,然后检查该目标是否包含 .child 类以切换所需的类。

const parent = document.querySelectorAll('.parent')
console.log(parent)

parent.forEach(div=>{
    div.addEventListener('click', (e) =>{
        let target = e.target
        console.log(target)
        if(e.target.matches('.child')){
            target.classList.toggle('changeBackground')
        }
    })
})
.parent{
    display: flex;
    justify-content: center;
    align-items: center;
    width: 100px;
    height:  100px;
    border: 2px solid black;
}

.child{
    display: flex;
    width: 50px;
    height: 50px;
    border: 1px solid red;
}

.child.changeBackground{
    background-color: yellow;
}
    <div class="parent">
        <div class="child"></div>
    </div>

     <div class="parent">
        <div class="child"></div>
    </div>

© www.soinside.com 2019 - 2024. All rights reserved.