Можно ли переместить объект HTML DOM в диалоговое окно браузера, чтобы реализовать функцию «отсоединения» - PullRequest
2 голосов
/ 23 февраля 2010

Если я открою диалоговое окно браузера с помощью window.open, могу ли я переместить объект HTML DOM вперед и назад?

Я знаю, как использовать jQuery .detach() для перемещения материала (со всеми связанными событиями) по странице. Интересно, есть ли способ сделать это между страницей и ее дочерним диалогом.

Основная цель заключается в поддержке функции «отсоединения» или «отрыва» для виджета на странице в отдельном диалоговом окне / окне.

1 Ответ

2 голосов
/ 23 февраля 2010

Вы не должны иметь возможность перемещать DOM-узел с одного ownerDocument на другой.DOM Level 1 Core говорит, что вы получите DOMException с кодом WRONG_DOCUMENT_ERR.Надо просто позвонить document.importNode, чтобы получить новую копию контента.(Существует также document.adoptNode, чтобы сделать это без копирования, но он более новый, поступающий в DOM Level 3 Core.

Однако:

  1. в конкретном случаеHTML-документы, отличные от XML, многие браузеры позволят вам использовать узлы из одного документа в другом ownerDocument.

  2. IE не поддерживает importNode. (Или adoptNode, очевидно.) Вы можете либо отступить, вставив узлы напрямую, когда importNode недоступен, либо сделать копию содержимого в новом документе вручную, либо с помощью DOM-хождения, либо с помощью сериализации / разбора HTML.потерять информацию; не ожидать восстановления произвольных свойств или событий EventListeners / IE-attach-events.)

  3. Могут быть некоторые проблемы с указанием пути события в одном документе в коде издругой документ, в IE6-7. Когда документы закрыты / перемещены, вы можете получить неожиданное поведение.

В любом случае, jQuery для этого не создан. Он инкапсулируетссылка на йВладелец документа сам по себе, поэтому, когда вы вызываете $ из кода, созданного в документе A, вы будете использовать объект document для документа A, даже если ваши узлы и путь к событию теперь находятся в документе B. Это будетвызвать много путаницы.В jQuery лучше всего хранить одну копию библиотеки для каждого документа и использовать только эту копию для взаимодействия с этим документом.

...