Как я могу определить, был ли динамически созданный элемент DOM добавлен в DOM? - PullRequest
38 голосов
/ 21 октября 2008

Согласно спецификации , только элементы BODY и FRAMESET предоставляют событие «onload» для подключения, но я хотел бы знать, когда создается динамически Элемент DOM был добавлен в DOM в JavaScript.

Используемые мной в настоящее время сверхъестественные эвристики, которые работают следующим образом:

  • Обходите parentNode свойство элемента назад, пока я не найду конечного предка (то есть parentNode.parentNode.parentNode.etc, пока parentNode не станет нулевым)

  • Если конечный предок имеет определенное ненулевое тело свойство

    • предположим, что данный элемент является частью dom
  • иначе

    • повторите эти шаги снова через 100 миллисекунд

Что мне нужно, так это либо подтверждение того, что я делаю, достаточно (опять-таки, это работает как в IE7, так и в FF3), либо лучшее решение, которое по какой-то причине я полностью забыл; возможно другие свойства, которые я должен проверить, и т. д.


РЕДАКТИРОВАТЬ: я хочу, чтобы это не зависело от браузера, к сожалению, я не живу в мире с одним браузером; Тем не менее, информация, относящаяся к конкретному браузеру, приветствуется, но, пожалуйста, обратите внимание, в каком браузере вы знаете, что она работает . Спасибо!

Ответы [ 11 ]

0 голосов
/ 21 октября 2008

Ни одно из DOMNodeInserted или DOMNodeInsertedIntoDocument событий не поддерживается в IE. Еще одна отсутствующая в IE [only] функция DOM - это функция compareDocumentPosition , предназначенная для выполнения того, что предлагает ее название.

Что касается предложенного решения, я думаю, что нет лучшего (если вы не сделаете несколько грязных трюков, таких как перезапись реализаций собственных членов DOM)

Также, исправляя заголовок вопроса: динамически создаваемый Элемент является частью DOM с момента его создания, его можно добавлять к фрагменту документа или к другому элементу, но нельзя добавлять к документу. .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...