Отмена отладки атрибута DOM
Как-то где-то в моем коде один из элементов на странице получает атрибут стиля, который я не ожидаю получить. А именно, он получает style = "position: fixed". Я вижу, что это происходит на вкладке HTML в Firebug, но не может найти его в коде. Приложение довольно большое, и я не могу просто просмотреть весь код, чтобы найти место, кроме того, используются несколько сторонних библиотек (один из них - jQuery).
Итак, мой вопрос: возможно ли каким-то образом уловить этот стиль, который будет изменен и получить трассировку?
Ответы
Ответ 1
Хорошо, после нескольких часов работы в Google и экспериментирования кажется, что лучше всего это сделать, чтобы настроить MutationEvent обработчик ( Firefox поддерживает их):
var node_modified = function(evt) {
if(evt.attrName == 'style') {
alert('Style is changing from ' + evt.prevValue + ' to ' + evt.newValue);
}
}
var test_close = document.getElementById('test_close');
test_close.addEventListener('DOMAttrModified', node_modified, false);
Затем настройте какой-то журнал в вашем коде и посмотрите, когда это событие активируется. К сожалению, вы не можете просто установить точку останова в обработчике событий мутации и увидеть трассировку стека, потому что трассировка стека обработчика событий не имеет информации о месте в коде, где событие было вызвано. Какой-то логичный, но я думаю, что с некоторыми хаками эта функция может быть реализована в Firebug.
Спасибо за ваше время!
Ответ 2
В Google Chrome щелкните правой кнопкой мыши на элементе страницы и выберите "Осмотреть элемент". Окно или панель инструментов разработчика откроются с этим элементом, выбранным в исходном представлении. Затем вы можете щелкнуть правой кнопкой мыши по выбранному тегу и выбрать "Изменить атрибуты атрибутов".
Ответ 3
В Firebug html inspector вы можете щелкнуть правой кнопкой мыши по node, и есть возможность прервать изменение атрибута.
Точки останова сохраняются при перезагрузке страниц, и вы также можете просматривать стек вызовов.
Ответ 4
Похоже, вам действительно нужен отладчик. Firebug имеет один встроенный, в противном случае вы можете дать Venkman попытка, которую я считаю немного более громоздкой, но, возможно, более эффективной.
Удачи!:)