如何使用JavaScript查找具有事件侦听器的所有元素?

如何解决如何使用JavaScript查找具有事件侦听器的所有元素?

<div id="test1" onlick="testFunction()" role="button" tabindex="0">A custom button</div>

<div id="test2" role="button" tabindex="0">Another custom button</div>

<button class="test3">A final button</button>

<ul id="test4">
  <li>Cookies</li>
  <li>Cream</li>
</ul>

<div id="test5">Just a div,not clickable </div>
document.getElementById('test2').addEventListener('keypress',function() { 
    console.log("foo");
  }
)
document.querySelectorAll('.test3').forEach(item => {
    item.addEventListener('click',event => {
      console.log("bar");
    })
  })

document.getElementById('test4').onclick = function(event) {
  let target = event.target;

  if (target.tagName != 'li') {
     event.target.addClass('highlight');
  }
};

我对使用JavaScript(最好没有jQuery或其他库)来查找具有附加事件的所有DOM元素感兴趣。有许多查找具有HTML事件属性(例如#test1)的元素的方法。但是,尚不清楚如何找到通过#test2.test3<ul id="test4">之类的脚本添加了事件的元素。正确的答案将返回包含四个元素的数组。

一个更好的响应将另外使用事件委托来找到元素,例如<li>,但似乎不可能。

编辑:querySelectorAll()现在选择test3类而不是test3标签

解决方法

没有本机的javascript API,您无法查找使用eventTarget.addEventListener添加的事件监听器。

无论该属性是使用javascript设置还是通过html内联设置,您仍然可以使用onclick属性添加事件-在这种情况下,您没有获得事件监听器,但是却获得了{{ 1}}属性是两件事。

Javascript没有提供这样做的api,因为可以在事件侦听器仍引用dom元素的情况下删除dom元素。

如果要跟踪与dom元素关联的事件侦听器,则必须自己进行操作。

除此Chrome之外,还有onclick命令行api,可与dom元素一起使用,但是它是开发人员工具的命令行api,因此仅 从开发人员工具调用时可以正常工作。

,

没有办法直接使用JavaScript。

但是,您可以使用此方法并在将事件绑定到元素时添加属性。

document.getElementById('test2').addEventListener('keypress',function() { 
    this.setAttribute("event","yes");
    console.log("foo");
  }
)
document.querySelectorAll('test3').forEach(item => {
    item.addEventListener('click',event => {
      this.setAttribute("event","yes");
      console.log("bar");
    })
  })

document.getElementById('test4').onclick = function(event) {
  let target = event.target;
  this.setAttribute("event","yes");

  if (target.tagName != 'li') {
     event.target.addClass('highlight');
  }
};

这是找到具有事件绑定的元素的方式:

var eventElements = document.querySelectorAll("[event='yes']");
var countEventElements = eventElements.length;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?