К информации интересующихся jQuery
Хелло.
Только что узнал, что 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 то их конечно не перенесет, это надо делать самому). Спасибо за внимание. :) |
Очень интересно. Я бы не прочь посмотреть на код метода data в разобранном виде с комментами, если не сложно, иначе не отказался бы от пинка в нужную сторону :) Заране благодарю.
|
Цитата:
он хорошо структурирован |
А можно еще так:
при бинде jQuery добавляет атрибут jquery+timestamp к элементам. Можно перекидывать этот атрибут, и все дела. |
Цитата:
Работа метода data проста: - связать данные с определенным узлом $('..').data(name, value) - получить эти данные $('..').data(name) - можно удалить связанные данные Очень удобно хранить вспомогательную информацию. А в первом сообщении я пишу о том, что сама библиотека делает то же самое, для своих процессов. Читал же я ядро - как то не упоминалось. Хотя полезно знать. |
Часовой пояс GMT +3, время: 23:35. |