Обойти событие DOMNodeInsertedIntoDocument - PullRequest
0 голосов
/ 20 июня 2011

Предположим, у меня есть функция javascript createMyElement, которая возвращает узел, который можно вставить в документ HTML.

Для правильного функционирования код узла, созданный createMyElement, должен прослушивать события в глобальном document как минимум, как только он вставлен в документ.

Моей первой попыткой было добавление DOMNodeInsertedIntoDocument и DOMNodeRemovedFromDocument прослушивателей к узлу во время создания, которые по очереди добавляют и удаляют требуемый прослушиватель на document.

Однако события мутации уже устарели (и, похоже, не работают надежно во всех браузерах), поэтому я ищу лучшее решение.

Добавление обработчика событий на document во время создания узла будет работать. Однако это не кажется хорошим решением, так как это приведет к утечке памяти и производительности: даже после того, как узел был удален из документа и больше не нужен, слушатель (и его ссылки на узел) в document все еще сохранится.

Ответы [ 2 ]

0 голосов
/ 21 мая 2013

Поскольку я изначально задавал свой вопрос, в ряде браузеров была реализована замена событий мутации, а именно наблюдателей мутаций, как определено в http://www.w3.org/TR/domcore/#mutation-observers,.

Таким образом, простой ответ на мой собственный вопрос заключается в том, чтобы просто использовать наблюдатели мутации в документе для прослушивания узлов, которые нужно вставить или удалить.

Однако еще лучше использовать новые пользовательские элементы из https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/index.html,, которые дают один insertedCallback с и removedCallback с для пользовательских элементов.

0 голосов
/ 12 сентября 2012

Используйте серию обратных вызовов функций или обратных вызовов сценариев по требованию для сериализации событий.

...