Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.09.2011, 16:54
Интересующийся
Отправить личное сообщение для JIEXA Посмотреть профиль Найти все сообщения от JIEXA
 
Регистрация: 07.02.2010
Сообщений: 17

Событие на изменение содержания
Скорее всего из серии нереального, но вдруг.

Скажите, есть ли какая-нибудь возможность поставить на 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'); 
});


Понятное дело, что такой код не будет работать.
Но возможно ли реализовать что-то подобное?
Ответить с цитированием
  #2 (permalink)  
Старый 24.09.2011, 17:14
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

document.body.__defineSetter__("innerHTML", function(){
     alert("изменение страницы detected");
});



вообще, существует определенное событие изменения структуры страницы. Тип этих событий называется Mutation

И включает в себя такие события
  • DOMSubtreeModified
  • DOMNodeInserted
  • DOMNodeRemoved
  • DOMNodeRemovedFromDocument
  • DOMNodeInsertedIntoDocument
  • DOMAttrModified
  • DOMCharacterDataModified

События не отменяются (т.е. нельзя отменить действие по-молчанию, как, например, отправка формы).

Они всплывают (за исключением 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

Последний раз редактировалось melky, 24.09.2011 в 17:27.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно подавить событие при подключении своего обработчика? Маэстро Firefox/Mozilla 2 03.09.2011 11:46
Событие на изменение window.location mixadior Events/DOM/Window 1 01.09.2011 14:03
Изменение содержания страницы без полной перезагрузки самой страни gelo Events/DOM/Window 7 29.08.2010 02:03
Изменение содержания контейнера KonstantinK Элементы интерфейса 8 29.06.2010 12:22
какое событие возникает во время формирования html IT-AleX Events/DOM/Window 2 20.02.2009 16:13