Событие на изменение содержания
Скорее всего из серии нереального, но вдруг.
Скажите, есть ли какая-нибудь возможность поставить на body обработчик любых изменений содержания? Объяснить сложно, покажу на псевдокоде, с использованием jquery. <html> <body> <div id="content"></div> </body> </html>
$(document).ready(function(){
$('body').change(function(){
console.log('содержание body или дочерних элементов изменилось');
});
// Изменяем body, чтобы вызвалось change
$('body').append('text');
// Изменяем дочерний элемент, чтобы опять же вызвалось change
$('#content').html('text');
});
Понятное дело, что такой код не будет работать. Но возможно ли реализовать что-то подобное? |
document.body.__defineSetter__("innerHTML", function(){
alert("изменение страницы detected");
});
вообще, существует определенное событие изменения структуры страницы. Тип этих событий называется Mutation И включает в себя такие события
События не отменяются (т.е. нельзя отменить действие по-молчанию, как, например, отправка формы). Они всплывают (за исключением DOMNodeRemovedFromDocument и DOMNodeInsertedIntoDocument ) Обработчику события передается ивэнт (очевидно. как и обычно при клике). Что содержит этот ивэнт - можно почитать в документации НО! пока это не работает.. т.е. проследить за изменением страницы посредством этих событий нельзя - не реализовано ещё. Но я попробую :) По клику по кнопке к телу документа будет ченить добавляться. Попробуем проследить это. Событие DOMNodeInserted отлично подойдёт - ведь добавляемый по клику текст является элементом TextNode. А оно идёт от NODE. т.е. будет встявляться узел при клике.
<button onclick="document.body.innerHTML+='<br>Clicked'">click</button>
<script>
document.body.addEventListener("DOMNodeInserted",function(e){ alert('страница изменена'); },false);
</script>
неколько алертов возникают из-за всплытия, наверное :) PS ни-я. оно работает О_О. Ch14 |
| Часовой пояс GMT +3, время: 22:50. |