如何使用JavaScript获取点击项的子文本

omtl5h9j  于 2023-03-21  发布在  Java
关注(0)|答案(3)|浏览(108)

这是我正在尝试的代码,DOM结构将是相同的。DOM是动态加载的,这就是为什么我正在尝试文档单击。我们需要获得当前单击框的颜色。使用jQuery很容易,无法在javaScript中找到解决方案。有人可以帮助解决这个问题吗?

document.addEventListener("click", function(e){
    const CTABtn = e.target.closest(".btn"); 

    if(CTABtn){
      alert('the color of the box');
    }

});
.container{
   display:flex;
   flex-wrap:wrap;
   justify-content:space-evenly;
}
.box{
   border:1px solid black;
   padding:5px;
}
<div class="container">
  <div class="box">
    <div>
      <h1>Red</h1>
    </div>
    <div>
      <button class="btn">CTA</button>
    </div>
  </div>
  <div class="box">
    <div>
      <h1>Green</h1>
    </div>
    <div>
      <button class="btn">CTA</button>
    </div>
  </div>
<div class="box">
    <div>
      <h1>Blue</h1>
    </div>
    <div>
      <button class="btn">Blue</button>
    </div>
  </div>
</div>
tnkciper

tnkciper1#

如果您只是将颜色作为数据属性添加到按钮上,这将容易得多。

document.addEventListener("click", function(e){
    const ctaBtn = e.target.closest(".btn[data-color]"); 

    if(ctaBtn){
      console.log(ctaBtn.dataset.color);
    }

});
.container{
   display:flex;
   flex-wrap:wrap;
   justify-content:space-evenly;
}
.box{
   border:1px solid black;
   padding:5px;
}
<div class="container">
  <div class="box">
    <div>
      <h1>Red</h1>
    </div>
    <div>
      <button class="btn" data-color="red">CTA</button>
    </div>
  </div>
  <div class="box">
    <div>
      <h1>Green</h1>
    </div>
    <div>
      <button class="btn" data-color="green">CTA</button>
    </div>
  </div>
<div class="box">
    <div>
      <h1>Blue</h1>
    </div>
    <div>
      <button class="btn" data-color="blue">Blue</button>
    </div>
  </div>
</div>

有多种方法可以完成您想做的事情,您可以访问父级并获取子级或引用同级
一个一个三个一个一个一个一个一个四个一个一个一个一个一个五个一个

kiayqfof

kiayqfof2#

使用closest是正确的,但是您要做的是找到包含.box(而不是.btn)的最近的元素,然后从那里找到框中的h1元素以从中获取文本:

const box = e.target.closest(".box"); 
const h1 = box && box.querySelector("h1");

if (h1) {
    alert(h1.textContent);
}

x一个一个一个一个x一个一个二个一个x一个一个三个一个

4c8rllxm

4c8rllxm3#

还有另一种,但更复杂的方法:

const elements = document.querySelectorAll('.box');

for (let i = 0; i < elements.length; i++) {
    let curr = elements[i];
    curr.onclick = () => {
        alert(curr.firstElementChild.firstElementChild.innerText);
    }
}

相关问题