Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как отслеживать изменение содержимого элемента (div, span)? (https://javascript.ru/forum/misc/79105-kak-otslezhivat-izmenenie-soderzhimogo-ehlementa-div-span.html)

drkrol 18.12.2019 11:29

Как отслеживать изменение содержимого элемента (div, span)?
 
Здравствуйте. Хочу дописать для себя скрипт в вк, типа "антиудаление сообщений". В сообщениях есть span с классом nim-dialog--preview _dialog_body. Подскажите, можно ли как-нибудь отслеживать каждые изменения этого блока? Выводить содержимое себе куда-нибудь я сам разберусь как, а вот отследить...

laimas 18.12.2019 11:46

https://developer.mozilla.org/ru/doc...tationObserver

drkrol 19.12.2019 11:47

чёт я не разобрался с Observer, поэтому подрубил jquery и начал отслеживать вот таким образом:
$("body").on('DOMSubtreeModified', "._dialog_body", function() {
console.log(this);
});

но теперь, почему-то, если мне пришлют сообщение, то оно будет продублировано в логах 2 раза, а я отправлю сообщение, то оно будет отображено 4 раза...


С чем это может быть связано?

laimas 19.12.2019 12:04

Цитата:

Сообщение от drkrol
чёт я не разобрался с Observer

https://learn.javascript.ru/mutation-observer


https://developer.mozilla.org/ru/doc...ubtreeModified

drkrol 19.12.2019 12:58

Цитата:

Сообщение от laimas (Сообщение 517772)

спасибо, но, как я понял, он следить только за одним из элементов, а мне нужно следить за всеми классами. Если указывать querySelectorAll(), то он не будет отрабатывать так, как надо. Будет ошибка:
Код:

Uncaught TypeError: Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'.

laimas 19.12.2019 13:13

Цитата:

Сообщение от drkrol
спасибо, но, как я понял, он следить только за одним из элементов

Это слежение за DOM, а DOM, это многочисленная семья. ;)

В сети полно примеров его использования, и читая примеры выводите в обработчике в консоль объект, станет понятно что к чему.


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