Наиболее эффективный способ обнаружения/контроля изменений DOM?

Мне нужен эффективный механизм для обнаружения изменений в DOM. Предпочтительно перекрестный браузер, но если существуют какие-либо действенные средства, которые не являются перекрестным браузером, я могу реализовать их с отказоустойчивым перекрестным методом браузера.

В частности, я должен обнаружить изменения, которые влияли бы на текст на странице, таким образом, любые новые, удаленные или измененные элементы или изменения во внутреннем тексте (innerHTML) будет требоваться.

Я не управляю внесенными изменениями (они могли произойти из-за третьей стороны, которую JavaScript включает, и т.д.), таким образом, к этому нельзя приблизиться от этого угла - я должен "контролировать" для изменений так или иначе.

В настоящее время я реализовывал "quick'n'dirty" метод, который проверяет body.innerHTML.length с промежутками. Это, конечно, не обнаружит изменения, которые приводят к той же возвращаемой длине, но в этом случае "достаточно хорошо" - шансы этого случая являются чрезвычайно небольшими, и в этом проекте, не удавание обнаружить изменение не приведет к потерянным данным.

Проблема с body.innerHTML.length это, это дорого. Это может взять между 1 и 5 миллисекундами на быстром браузере, и это может сорвать вещи много - я также имею дело с количеством большого выхода iframes, и все это складывает. Я вполне уверен дороговизна в выполнении, это вызвано тем, что innerHTML текст не хранится статически браузерами и должен быть вычислен от DOM каждый раз, когда это читается.

Типы ответов, которые я ищу, являются чем-либо от "точного" (например, событие) к "достаточно хорошему" - возможно, что-то как "quick'n'dirty" как innerHTML.length метод, но это выполняется быстрее.

Править: Я должен также указать, что, пока было бы "хорошо" обнаружить точный элемент, который был изменен, это не абсолютная необходимость - просто то, что было любое изменение, было бы достаточно хорошо. Надо надеяться, это расширяет ответы людей. Я собираюсь исследовать События Мутации, но мне все еще нужна нейтрализация для поддержки IE, таким образом, любому эксцентричному, творческому, outside-of-the-square идеи очень были бы рады.

46
задан Frambot 1 October 2013 в 21:35
поделиться

3 ответа

http://www.quirksmode.org/js/events/DOMtree.html

jQuery теперь поддерживает способ прикрепления событий к существующим и будущим элементы, соответствующие селектору: http://docs.jquery.com/Events/live#typefn

Еще одна интересная находка - http://james.padolsey.com/javascript/monitoring-dom- properties /

10
ответ дан 26 November 2019 в 20:39
поделиться

События мутации - это рекомендация W3 того, что вы ищете ..

Не уверен, поддерживаются ли они повсюду .. (IE скорее всего не поддержит их ..)

8
ответ дан 26 November 2019 в 20:39
поделиться

Вы можете попробовать использовать события DOMNodeInserted и DOMNodeRemoved. Согласно Quirksmode, они вроде работают в большинстве браузеров, за заметным исключением IE ...

http://www.quirksmode.org/dom/events/index.html

1
ответ дан 26 November 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: