Обратный вызов DOM для создания узла
Я хочу, чтобы определенный обратный вызов выполнялся каждый раз, когда div, удовлетворяющий определенному селектору, вставляется в DOM. Я просмотрел документацию по событиям DOM, и самое близкое событие, которое я нашел, - это "загрузка", но, как я надеюсь, это не совсем работает.
В идеале я хочу что-то вроде:
$(".myclass").live("load", function(){... do stuff to $(this) ...}
Чтобы дать некоторый контекст тому, что я делаю:
У меня есть событие на веб-странице, которое создает новые формы при каждом нажатии какой-либо кнопки. Изменение этого кода JS крайне нежелательно. Я хочу преобразовать одно из полей в форме в jstree, поэтому единственный подход, который мне удалось придумать, - это добавить обратный вызов для события вставки в DOM и присоединить jstree внутри функции.
Обновление: я нашел DOMNodeInserted, но, видимо, он не поддерживается в IE.
1 ответ
Массивное предупреждение: DOMMutationEvents, как определено в уровне DOM 3, устарели.
document.addEventListener("DOMNodeInserted", function (ev) {
var node = ev.target;
if (careAbout(node)) {
runCode(ev);
}
});
DOMNodeInserted
Событие задокументировано на уровне событий DOM 2.
Конечно, поддержка браузера посредственная.
Единственный способ эмулировать это в несовместимых браузерах - опросить весь DOM на предмет того, изменилось ли дерево, и запустить события вручную. Это тоже дорого, как ад.
Но ваша настоящая проблема:
Изменение этого кода JS крайне нежелательно
У вас плохой, некрасивый, не поддерживаемый код. Игнорирование этого не решит проблему. Обойти это не заставит его уйти. Лучше всего сделать рефакторинг, рефакторинг, рефакторинг.