Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   MutationObserver или Наблюдатель (https://javascript.ru/forum/jquery/33754-mutationobserver-ili-nablyudatel.html)

Shitbox2 06.12.2012 21:03

MutationObserver или Наблюдатель
 
В продолжение этой темы http://javascript.ru/forum/misc/3037...nobserver.html

Нужно отслеживать изменения dom в определенном контейнере. Наверное, лучше подойдет MutationObserver, но по нему мало информации. В частности не нашел, в каких браузерах он поддерживается на данный момент. Подскажите, если знаете. Ну и на русском никакого руководства для быстрого старта тоже нет.

Второй вариант - паттерн Наблюдатель. Где можно взять наиболее вменяемые его реализации? В jQuery не встроили еще?

tenshi 07.12.2012 00:02

DOMSubtreeModified ие9+ и всеми остальными

Shitbox2 07.12.2012 07:24

А как он там называется? В хроме и сафари, например, MutationObserver не работает, там вместо него WebKitMutationObserver

tenshi 07.12.2012 18:32

http://lmgtfy.com/?q=DOMSubtreeModified

Shitbox2 07.12.2012 21:07

Врубился. Не то искал просто

Magneto 08.12.2012 02:17

Цитата:

Сообщение от tenshi
DOMSubtreeModified ие9+ и всеми остальными

Не нужно вводить пользователей в заблуждение.
Ка я уже писал: Так как Mutations Events (DOMSubtreeModified - одно из таких событий) являются очень требовательными к вычеслительным рессурсам пользователя, то разработчики браузеров рекомендуют использовать MutationObserver. И это не просто рекомендации, например расширение для браузера Firefox не проходило модерацию из-за того что я использовал DOMSubtreeModified.
И MutationObserver были специально разработаны для замены Mutations Events.

Про MutationObserver можно прочитать здесь и здесь правда на англ.

Еще как вариант можно написать свой наблюдатель за изменением DOM дерева.

// Следим за всеми елементами и их атрибутами в div с id monitored
var originalDOM = document.getElementById('monitored').innerHTML,
	actualDOM;

setInterval(function () {
	actualDOM = document.getElementById('monitored').innerHTML;

	if (originalDOM !== actualDOM) {
		originalDOM = actualDOM;

		//	...
		//	Здесь нужный код
		//	...
	}
}, 1000); // проверяем изменения каждую секунду

tenshi 08.12.2012 12:47

> Mutations Events (DOMSubtreeModified - одно из таких событий) являются очень требовательными к вычеслительным рессурсам

бенчмарки в студию

> разработчики браузеров рекомендуют использовать MutationObserver

сколько браузеров его поддерживают?

> Еще как вариант можно написать свой наблюдатель за изменением DOM дерева.

угу, сериализация всего поддерева - это куда быстрее чем всплытие событий

> проверяем изменения каждую секунду

и получится тупящий интерфейс

tenshi 08.12.2012 20:08

кроме как нагадить в карму ничего умнее не придумал?

Magneto 08.12.2012 21:10

Цитата:

Сообщение от tenshi
> Mutations Events (DOMSubtreeModified - одно из таких событий) являются очень требовательными к вычеслительным рессурсам

бенчмарки в студию

Так о чем с тобой разговаривать? Если я говорю что производители браузеров отказались от Mutations Events и вместо него советуют или вовсе отказаться от наблюдения за DOM деревом или использовать MutationObserver. А ты мне о бенчмарках.

А ну да ты настолько крут что производители браузеров тебе не указ.

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

tenshi 08.12.2012 21:49

> я говорю что производители браузеров отказались от Mutations Events

каких конкретно браузеров? начиная с каких версий их поддержки больше не будет?

> А ты мне о бенчмарках

то есть подтвердить свои слова цифрами ты не можешь?


Часовой пояс GMT +3, время: 11:16.