javascript - 在窗口单击事件中访问元素及其子/后代

标签 javascript events

在我的窗口事件中,如果指针点击父对象或其子对象/后代对象,它应该做一些事情。 问题是事件无法访问 parent 的 child 和孙子。条件存储在 targetIsInsideParent 变量中。

HTML

<div class="parent">
  Parent
  <div class="child">
    Child
    <div class="grandchild">
      GrandChild
    </div>
  </div>
</div>

JS

const parent = document.querySelector('.parent');

window.addEventListener('click', e => {
  const targetIsParent = e.target === parent;
  const targetIsInsideParent = e.target === parent.children; // !!!!

  if(targetIsParent || targetIsInsideParent) {
    console.log('Good');
  }
})

最佳答案

尝试使用 parent.contains(e.target)parent.compareDocumentPosition(e.target) === 20

const parent = document.querySelector('.parent');

window.addEventListener('click', e => {
  const targetIsParent = e.target === parent;
  const targetIsInsideParent = parent.contains(e.target);
  // const targetIsInsideParent = parent.compareDocumentPosition(e.target) === 20; // alternative, but also works good
  if(targetIsParent || targetIsInsideParent) {
    console.log('Good');
  }
})
<div class="parent">
  Parent
  <div class="child">
    Child
    <div class="grandchild">
      GrandChild
    </div>
  </div>
</div>
<div>Other</div>

关于javascript - 在窗口单击事件中访问元素及其子/后代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53157310/

相关文章:

javascript - JQuery 在无序列表中查找下一个类

c# - 每次调用新方法时触发事件

javascript - sort() 按第一个数字而不是整个数字对数据进行排序

javascript - React Router 仅当从 root url 启动时才能够进行路由

javascript - 使 tr 宽度与粘性表格标题上的 thead 宽度匹配

javascript - 图像显示一些乱码值

c# - 如何在运行时发出事件

jquery - 当 jQuery 中的事件触发一段时间后,我如何执行 jQuery 函数?

javascript - A-tag 中的 Fire Click 事件

c# - 我怎样才能阻止 AxWindowsMediaPlayer 在 C# 中接受任何用户命令