2016-12-08 17 views
2

イベントバインドされたページ上のすべての要素を取得する方法はありますか。 私はすべてのイベントを特定のイベントにすることができると知っていますが、すべての要素がある方法はありますか?JavaScript:イベントバインドを持つすべての要素を取得する

+0

[ 'getEventListeners(文書)'](https://developers.google.com/web/tools/chrome-devtools/console/command-line-reference ?utm_source = dcc&utm_medium =リダイレクト&utm_campaign = 2016q3#geteventlistenersオブジェクト)がこのトリックを行う可能性があります。これは、開発者のコ​​ンソールで動作しますが、これが.jsファイルで動作するかどうかはわかりません。 –

+0

ありがとう、私はこの機能を知っていますが、それは単一の要素でのみ動作します。 ページ上のすべての要素が必要です。 domを再帰的にループして、各要素に対してこのメ​​ソッドを呼び出すことができます。 はるかに簡単な解決策がありますか? – marcobiedermann

+0

イベントはどのようにバインドされていますか? '.on()'と '.off()'がどれくらい簡単に使用できるのか、そして名前空間を使って簡単に整理し、管理することがより簡単になるので、私は個人的にすべてのイベント管理にjQueryを使いたい。 – Turk

答えて

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; 
}); 

全クレジット:https://gist.github.com/danburzo/9254630

0

コメントに示唆されているように、chrome開発ツールでgetEventListeners(document)を使用できますが、これをコード内で使用したい場合は、custon関数を使用してイベントを登録し、イベントatached。

コードではない使用する準備ができて、ちょうど例

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

もちろん、イベントが削除されたときに要素を削除する必要があります。

イベントを登録するすべてのコードを制御できない場合は、モンキーパスNode.prototype.addEventListenerの機能を使用できます。これはお勧めしません(あなたはもっと読むことができますhere)。しかし、それは可能性があります...

関連する問題