Обратный вызов 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 крайне нежелательно

У вас плохой, некрасивый, не поддерживаемый код. Игнорирование этого не решит проблему. Обойти это не заставит его уйти. Лучше всего сделать рефакторинг, рефакторинг, рефакторинг.

Другие вопросы по тегам