2010-03-24 2 views
7

Есть ли какие-либо практические способы определить, какая часть DOM была изменена, если вы знаете, что она будет изменена?Можно ли определить, была ли DOM изменена и какая часть?

Я пишу плагин, который будет работать вместе с javascript, который я не писал. событие будет инициировано до изменения DOM, и после изменения произойдет одно событие. Моя задача - решить, что изменилось. возможно ли это, и если да, то какой наименее ужасный способ сделать это?

+0

это интересный вопрос. Ничего хорошего, ни приличного способа. Моя первая идея заключалась в том, чтобы сделать копию всех объектов dom в вашем событии «до изменения», а затем в вашем событии «после изменения» сравните текущие объекты dom с тем, что вы сделали. Этот вариант правдоподобен, если у вас есть известный список объектов dom, которые можно изменить, и у вас есть ограниченное количество изменений, которые вы ожидаете. Даже если это уродливое решение и не рекомендовал бы его, но это первое, что пришло в голову. – Jay

+1

Вы можете написать код, который будет вычислять агрегатное хеш-значение суб-DOM на каждом узле (в зависимости от того, что вам нужно в DOM). Важно, чтобы хэш на каждом узле являлся функцией узла * и * поддерева. Затем вы можете отслеживать изменения, сначала проверяя, изменились ли хэш-коды. – Pointy

+0

Спасибо за ответы. – mkoryak

ответ

0

Это не представляется возможным в любом практическим образом

+0

Это возможно с событиями мутации DOM во всех основных браузерах, кроме IE <= 8. –

1

Возможно, если вы знаете, какой аспект элементов DOM необходимо изменить, необходимо сохранить значение этого атрибута в узле .data() для каждого элемента при загрузке страницы, а затем сравнить после запуска сценария ,

0

Вы также можете сделать хэш текста страницы (например, полную строку источника) и сравнить его (при изменении) с текущим хешем.

0

С jquery вы можете запускать: анимированный фильтр для поиска анимированных элементов, я не знаю, будет ли у вас так много задержек между этими событиями, но если основной триггер при начальном преобразовании запускается, только когда трансформация вы можете попытаться поймать: анимированный элемент и захватить начальное состояние до окончания анимации, а затем завершить состояние захвата и сравнить, его единственный намек у меня нет никакой демонстрации или способа воспроизвести вашу рабочую среду, но я надеюсь, что это руководство может дать у вас есть идея.

Смежные вопросы