Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   MutationObserver (https://javascript.ru/forum/misc/35599-mutationobserver.html)

Bebarr Swallow 15.02.2013 18:16

MutationObserver
 
Подскажите пожалуйста. Раньше использовал событие DOMSubtreeModified, теперь подсказали что оно очень не эффективно и нужно использовать MutationObserver.

Так вот, раньше было так:
document.addEventListener("DOMSubtreeModified", myFnc, false);
function myFunc() {
  // получаю список элементов с классом 'img' и без класса 'wellDone'
  // даю на обработку массив элементов
}


5-минутных попыток самому въехать в тему не хватило. Надеюсь подскажите как отловить новые элементы с классом img (которые раскиданные по DOM, но имеют общего родителя body) :)

danik.js 15.02.2013 18:19

Вы не имеете контроля над html-документом? Вы делаете расширение для браузера?

Bebarr Swallow 15.02.2013 18:20

Да

danik.js 15.02.2013 18:33

https://developer.mozilla.org/en-US/...tationObserver

Bebarr Swallow 15.02.2013 19:33

Я оттуда и читал.

danik.js 15.02.2013 20:07

В чем возникла проблема?

Bebarr Swallow 15.02.2013 20:36

Mozilla Firefox тупо записал насмерть.. xD

Писал так:
// select the target node
var target = document.querySelector('.img'); // сейчас я понял что нужно указать body
 
// create an observer instance
var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
        if(/img/.test(mutation.target.className)) // как тогда отлавливать новые .img?
          mutation.target.style.outline = "1px solid red"
    });    
});

// configuration of the observer:
var config = { attributes: true, childList: true, characterData: true }

// pass in the target node, as well as the observer options
observer.observe(target, config);

// later, you can stop observing
//observer.disconnect();

danik.js 15.02.2013 21:05

Цитата:

Сообщение от Bebarr Swallow
записал насмерть

Ну он описался от смеха читая твой код

Ты подписываешься на "событие" изменения атрибута, и тут же сам изменяешь атрибут style => рекурсия. Подписывайся только на нужные изменения.

Bebarr Swallow 15.02.2013 21:56

Ну да, во блин прокол.
Нуб же :D

А че мне надо то? Я думаю так - subtree и childList. Потом еще попробую

danik.js 15.02.2013 22:07

Наверное subtree достаточно будет.


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