Подтвердить что ты не робот

Могу ли я поработать с отладчиком при всех изменениях элемента DOM?

Мне бы очень хотелось видеть код, который влияет на определенный элемент DOM.

Но мне также очень хотелось бы не просматривать все мои javascript-поиск ссылок/селекторов, которые могут вызвать проблему.

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

4b9b3361

Ответ 1

Это также можно сделать без написания каких-либо script в Firebug, а также в инструментах разработчика Chrome (возможно, другие, не проверял далее).

В Firebug:

  • Перейдите на вкладку HTML
  • Щелкните правой кнопкой мыши элемент, который вы хотите отслеживать.
  • Выберите "Изменение атрибута прерывания" или "Перерыв на дочернем добавлении или удалении" или "Удаление элемента управления"

В инструментах разработчика Chrome

  • Перейдите на вкладку Элементы
  • Щелкните правой кнопкой мыши элемент, который вы хотите отслеживать.
  • Выберите "Break On...", затем выберите "Subtree Modification" или "Изменение атрибутов" или "Node" Удаление "

Я действительно нашел это после попытки принять ответ 999, однако данный код не работал у меня. Кроме того, возможность Chrome отслеживать события на любом поддереве DOM кажется действительно приятной.

Ответ 2

Примечание. События, которые были ниже, были хороши, когда вопрос был задан, но больше не являются текущими. Рекомендуемая альтернатива - MutationObservers, но они все еще созревают

MutationObserver на MDN


Попробуйте это (в Firefox, используя Firebug):

function breakOnChange(el) {

    if (!el.addEventListener) return;

    el.addEventListener('DOMAttrModified',
         function(DOMAttrModifiedEvent){debugger}, true);

    el.addEventListener('DOMNodeInserted',
         function(DOMNodeInsertedEvent){debugger}, true);

    el.addEventListener('DOMNodeRemoved',
         function(DOMNodeRemovedEvent){debugger}, true);

}

// Usage:
breakOnChange(someDomNode);