Javascript 如何获取事件侦听器的已注册元素?

Javascript 如何获取事件侦听器的已注册元素?,javascript,html,Javascript,Html,我有一个页面,它有一堆嵌套的元素 div -div --分区 -——a -———分区 -——跨度 --img 这种模式及其变体在整个页面中重复 我目前正在注册a元素 document.querySelectorAll('.click-aware a').addEventListener('click', myListener); function myListener(evt) { // some logic function goes here } 问题是,evt对象不包含对a元素的引

我有一个页面,它有一堆嵌套的元素

div
-div
--分区
-——a
-———分区
-——跨度
--img

这种模式及其变体在整个页面中重复

我目前正在注册
a
元素

document.querySelectorAll('.click-aware a').addEventListener('click', myListener);

function myListener(evt) {
  // some logic function goes here
}
问题是,
evt
对象不包含对
a
元素的引用

evt.target
指向最里面的元素(在本例中为
img
),并且
srcelment
toElement
也指向它

如何获得
a
元素,而不必向上遍历
evt.path
,直到击中
a

不允许jQuery

我这样问是因为有时候监听器没有连接到
a
元素


TLDR:如何获取事件侦听器注册到的元素?

您可以使用
this
关键字获取对拥有处理程序的元素的引用,或
event.currentTarget
属性()

Event.currentTarget在事件遍历DOM时标识事件的当前目标。它总是指事件处理程序已附加到的元素,而不是标识事件发生所在元素的event.target


event.currentTarget
是一个更好的选项,因为如果使用箭头函数(es6)而不是常规的旧函数来定义处理程序,那么
this
将引用定义处理程序函数的上下文。

它应该由this关键字引用,我不能接受这一答案,不过还是要谢谢你!我经常忘记Javascript中的
这个
。我的意思是我不能接受评论作为答案。我会将它作为答案添加:)“this”是触发事件的元素,不一定是事件的附加位置。这很公平。但是你可以。当附加你所说的@KeithRousseau时绑定它?我的意思是,如果你只使用addEventListener,“this”将是e.currentTarget。您需要像Tiago提到的那样使用bind。bind的问题是,在绑定之后无法删除事件侦听器。看:你是对的-它确实给出了正确的元素。但我仍然认为,在大多数情况下,这更令人困惑。如果对元素列表使用事件委派,则无法使用它,并且需要遍历DOM。