javascript - e.target.parentNode 和 e.path 有什么区别[1]

标签 javascript html

我想知道 e.target.parentNodee.path[1] 之间有什么区别?如果有的话,什么更好以及为什么?

结构如下:

enter image description here

这是控制台日志:

console.log("button clicked!!!",e.target.parentNode, e.path[1], e.path[2])

enter image description here

这里是点击console.log(e)

enter image description here

注意:点击事件位于按钮元素上

谢谢

最佳答案

通过实验,在我发现支持它的浏览器上,e.path[1]e.target.parentNode 引用相同的元素。例如,没有区别。

但请注意,Event#path 并未得到很好的支持(而 Event#targetNode#parentNode 则得到很好的支持),并且到目前为止据我所知,它还没有标准化:它没有出现在 DOM4 Event interface 中, 例如。它也不在 WHAT-WG Event interface 中,但该规范确实提到了一种方法composedPath ,似乎返回相同类型的信息。

Chrome 51 似乎支持 Event#path; Firefox 47 没有。两者都不支持composedPath

您可以在此处查看您当前的浏览器是否支持它:

document.getElementById("outer").addEventListener("click", function(e) {
  var hasPath = !!e.path;
  var hasComposePath = !!e.composedPath;
  console.log("Has `path`? " + (hasPath ? "Yes" : "No"));
  console.log("Has `composedPath()`? " + (hasComposePath ? "Yes" : "No"));
  if (hasPath) {
    console.log("e.path[1] === e.target.parentNode? " + (e.path[1] === e.target.parentNode));
  }
});
<div id="outer">
  <div id="inner">
    Click me
  </div>
</div>

关于javascript - e.target.parentNode 和 e.path 有什么区别[1],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38481549/

相关文章:

javascript - 使用 typescript 修改 JSON

javascript - Twitter Bootstrap 模式和 Youtube 自动播放并在关闭时停止

javascript - 将每个类的 innerHTML 复制到另一个 div

javascript - Opentok 在 session 之间切换

javascript - 想要在 Node JS/MySQL 中将 12 小时时间字符串转换为时间对象

html - 表单中的 CSS 继承问题

html - Flexbox 和 vh 高度单位在 IE11 中不兼容吗?

javascript - Vue 使用 v-model 选择第一个选项

javascript - 出于某种原因,我的 unslider 不随屏幕缩放..包括 fiddle

javascript - HTML 详情标签开启方向?如何改变?