2016-12-08 42 views
2

JavaScript中是否有一種方法來獲取頁面上所有具有事件綁定的元素。 我知道你可以得到所有事件的一個特定的事件,但有沒有一種方式的所有元素?JavaScript:獲取綁定事件的所有元素

+0

['getEventListeners(文件)'](https://developers.google.com/web/tools/chrome-devtools/console/command-line-reference utm_source = dcc&utm_medium = redirect&utm_campaign = 2016q3#geteventlistenersobject)可能會訣竅。這在開發人員的控制檯中工作,但我不知道這是否在.js文件中工作。 –

+0

謝謝,我知道這個功能,但它只對單個元素有效。 我需要頁面上的所有元素。 我可以遞歸循環dom並在每個元素上調用此方法。 是否有更簡單的解決方案? – marcobiedermann

+0

事件如何被綁定?我個人喜歡將jQuery用於所有事件管理,因爲要使用'.on()'和'.off()'是多麼簡單,再加上名稱間距,更容易保持自己的組織和管理您關心的事件。 – 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函數來註冊事件並獲得一系列元素事件發生了。

代碼不準備使用,只是一個例子

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

你當然需要時被刪除事件要刪除的元素。

如果你不能控制所有註冊事件的代碼(這是很常見的),你可以使用猴子路徑Node.prototype.addEventListener函數。這不是推薦的(你可以閱讀更多here)。但它是一種可能性...

相關問題