JavaScript中是否有一种方法可以获取页面上所有绑定事件的元素。 我知道你可以把所有事件都当成一个特定的事件,但所有元素都有一种方式吗?
答案 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)。但这是一种可能性......