有沒有辦法列出包含兩個或多個同類事件的所有元素?帶多個事件監聽器的列表元素
我把在JsBin一個小例子: http://jsbin.com/alafo3/edit
在這個例子中,我想包含<p>
與ID =「hallo2」名單。
有沒有辦法列出包含兩個或多個同類事件的所有元素?帶多個事件監聽器的列表元素
我把在JsBin一個小例子: http://jsbin.com/alafo3/edit
在這個例子中,我想包含<p>
與ID =「hallo2」名單。
您也可以訪問附加數據的events
密鑰,例如,
$('#hello2').data('events').click.length
返回2
。
更新:
例如,您可以延長jQuery的是這樣的:
$.fn.hasMultipleEventHandlersFor = function(event) {
return this.filter(function() {
var events = $(this).data('events');
return events && events[event] && events[event].length > 1;
});
};
而且使用它像:
$('p').hasMultipleEventHandlersFor('click');
這將選擇具有多個處理程序的所有元素點擊事件。
你也可以遍歷,事件的存儲,這樣的$.cache
對象:
$.each($.cache, function(i, v) {
if(v.events && v.events.click && v.events.click.length > 1) {
alert($('[' + $.expando + '=' + i + ']').attr('id'));
}
});
Give it a try here,或使其成爲任何事件有多個處理程序更通用的,就像這樣:
$.each($.cache, function(i, v) {
$.each(v.events, function(j, u) {
if(u.length > 1)
alert($('[' + $.expando + '=' + i + ']').attr('id'));
});
});
You can try that version here,請注意,這兩種方法都需要jQuery 1.4+,expando
屬性不會在1.3.x中公開。
如果你想要一個jQuery集合引用這些元素,你可以爲你去,這樣構建它:
var elems = [];
$.each($.cache, function(i, v) {
$.each(v.events, function(j, u) {
if(u.length > 1)
$.merge(elems, $('[' + $.expando + '=' + i + ']'));
});
});
$(elems).css('color', 'red'); //use it, $(DOMElementArray) overload here
@downvoter - 它有助於解釋你認爲不正確的東西。如果你有能夠改善未來觀衆的答案的知識,最好分享它。 – 2010-07-22 14:29:01
不錯,如果在jQuery 1.4.3+中檢查非DOM對象(如窗口對象)上的事件,也要小心,看看爲什麼在http://stackoverflow.com/a/4331226/352672 – Nelson 2012-10-24 16:04:34