Обратный вызов DOM для создания узла - PullRequest
1 голос
/ 03 ноября 2011

Я хочу, чтобы определенный обратный вызов выполнялся каждый раз, когда div, удовлетворяющий определенному селектору, вставлялся в DOM.Я просмотрел документацию по событиям DOM, и самое близкое событие, которое я нашел, это то, что мне нужно, это «загрузка», но, как я надеюсь, это не совсем работает.

В идеале я хочу что-то построки:

$(".myclass").live("load", function(){... do stuff to $(this) ...}

Чтобы дать некоторый контекст тому, что я делаю:

У меня есть событие на веб-странице, которое создает новые формы при каждом нажатии какой-либо кнопки.Изменение этого кода JS крайне нежелательно.Я хочу преобразовать одно из полей формы в jstree, поэтому единственный подход, который мне удалось придумать, - это добавить обратный вызов для события вставки в DOM и присоединить jstree внутри функции.


Обновление: я нашел DOMNodeInserted, но, видимо, он не поддерживается в IE.

1 Ответ

5 голосов
/ 03 ноября 2011

Массивное предупреждение: DOMMutationEvents , как определено в DOM уровня 3. устарели.

document.addEventListener("DOMNodeInserted", function (ev) {
  var node = ev.target;
  if (careAbout(node)) {
    runCode(ev);
  }
});

Событие DOMNodeInserted задокументировано в событиях DOMУровень 2 .

Конечно, поддержка браузера посредственная.

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

Но ваша реальная проблема:

Изменение кода JS крайне нежелательно

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

...