Хелло.
Только что узнал, что jQuery хранит данные о навешанных на элемент обработчиках событий в свойстве data элемента.
Например такая задача: нужно элемент удалить и вместо него вставить "другие", а обработчики этого элемента перенести на один из "других". Элементы разного типа - например select и span.
(Это конечно в том случае если не "к месту" метод live и другого типа прослушка).
Исходные данные - заменяемый
id = xxx:
<select id="xxx">
его обработчики:
$(document).ready(
function() {
$('#xxx').click(function(){alert(this.tagName)});
$('#xxx').mouseover(function(){alert('over')});
$('#xxx').bind('mouseout', function(){alert('out');
});
Замена:
var obj = document.getElementById('xxx'); // заменяемый
var $obj0 = $('<div>me<span>на меня перенесется</span></div>'); // на что меняем
var obj2 = $obj0.find('span')[0]; // на кого перенесутся обработчики
// манипуляции замены(взяты из самой библиотеки - там где клонирование)
var events = $(obj).data( "events" ); // !!!
for ( var type in events ) {
for ( var handler in events[ type ] ) {
jQuery.event.add( obj2, type, events[ type ][ handler ], events[ type ][ handler ].data );
}
}
$(obj).replaceWith($obj0); // заменяем
P.S. Если у элементов есть другие обработчики (указанные в атрибутах тегов или с помощью js то их конечно не перенесет, это надо делать самому).
Спасибо за внимание.