Мне нужно создать временный элемент DOM, который не зависит от моего основного документа. Я делаю это, используя мой основной документ для создания элемента, но не добавляя его к дереву.
Element temporaryParentElement = document.createElement(PERMISSIONSET);
Он используется для создания таблиц в диалоговом окне. После закрытия диалогового окна мне больше не нужен этот элемент, поэтому я попытался его удалить:
document.removeChild(temporaryParentElement);
Это привело к исключению:
org.w3c.dom.DOMException: NOT_FOUND_ERR: An attempt is made to reference a node in a context where it does not exist.
Если я правильно понимаю, созданный узел не может быть удален, если он не является частью дерева. Нужно ли добавлять его к дереву, а затем вызывать метод remove? Или сборщик мусора заботится об этом элементе?
Создание элемента отличается от добавления или удаления его в существующее дерево. Вы используете ссылку на этот document
для создания элемента, но затем добавляете его к другому элементу. Вы можете удалить его, используя ссылку этого элемента.
Метод removeChild
удаляет элемент из дерева, где он был добавлен до (с appendChild
или проанализирован, когда документ был прочитан).
Вы должны найти элемент, который представляет родительский элемент этого элемента, чтобы удалить его. Предположим, что родительский dialog
. Вы будете использовать:
dialog.removeChild(temporaryParentElement);
temporaryParentElement.getParentNode()
родительский элемент.getParentNodetemporaryParentElement.getParentNode()
возвращает ноль.