Мне нужен эффективный механизм для обнаружения изменений в 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 идеи очень были бы рады.
http://www.quirksmode.org/js/events/DOMtree.html
jQuery теперь поддерживает способ прикрепления событий к существующим и будущим элементы, соответствующие селектору: http://docs.jquery.com/Events/live#typefn
Еще одна интересная находка - http://james.padolsey.com/javascript/monitoring-dom- properties /
События мутации - это рекомендация W3 того, что вы ищете ..
Не уверен, поддерживаются ли они повсюду .. (IE скорее всего не поддержит их ..)
Вы можете попробовать использовать события DOMNodeInserted и DOMNodeRemoved. Согласно Quirksmode, они вроде работают в большинстве браузеров, за заметным исключением IE ...