JavaScript:获取所有绑定事件的元素

时间:2016-12-08 15:35:03

标签: javascript events dom

JavaScript中是否有一种方法可以获取页面上所有绑定事件的元素。 我知道你可以把所有事件都当成一个特定的事件,但所有元素都有一种方式吗?

2 个答案:

答案 0 :(得分:1)

谢谢大家的帮助。我发现这个伟大的片段循环遍历页面上的所有元素,并将每个具有事件绑定的元素添加到数组中。

var items = Array.prototype.slice.call(
  document.querySelectorAll('*')
).map(function(element) {
  var listeners = getEventListeners(element);
  return {
    element: element,
    listeners: Object.keys(listeners).map(function(k) {
      return { event: k, listeners: listeners[k] };
    })
  };
}).filter(function(item) {
  return item.listeners.length;
});

完全归功于Dan:buildship

答案 1 :(得分:0)

正如评论中所建议的那样,您可以在chrome dev工具上使用getEventListeners(document),但是如果您想在代码中使用它,可能的解决方案是使用custon函数来注册事件并保留一个列表有事件的元素。

代码尚未准备就绪,只是一个例子

let elements = [];
function addEventListener(elem, event, cb) {
   elem.addEventListener(event, cb);
   elements.push(elem);
}

当然,您需要在删除事件时删除该元素。

如果您无法控制所有注册事件的代码(这很常见),您可以猴子路径 Node.prototype.addEventListener功能。这不是建议的(你可以阅读更多here)。但这是一种可能性......