Вот более простой метод, использующий стандартный Node.contains DOM API для проверки того, что элемент в данный момент находится в DOM:
document.body.contains(MY_ElEMENT);
ПРИМЕЧАНИЕ: CROSS-BROWSER : объект документа в IE не имеет метода contains()
- для обеспечения кросс-браузерной совместимости вместо этого используйте document.body.contains()
. (или document.head.contains, если вы проверяете наличие таких элементов, как ссылка, скрипт и т. д.)
Примечания по использованию конкретной document
ссылки относительно уровня узла ownerDocument
:
Кто-то высказал идею использования MY_ELEMENT.ownerDocument.contains(MY_ELEMENT)
для проверки наличия узла в документе. Хотя это может привести к намеченному результату (хотя в 99% случаев с большей степенью детализации, чем необходимо), это также может привести к неожиданным результатам, в зависимости от варианта использования. Давайте поговорим о том, почему:
Если вы имеете дело с узлом, который в данный момент находится в отдельном документе, например, сгенерированным с document.implementation.createHTMLDocument()
, документом <iframe>
или документом HTML Import, и используете свойство ownerDocument
узла, чтобы проверить наличие в том, что вы думаете, будет вашим основным визуально визуализированным document
, вы попадете в мир боли.
Свойство узла ownerDocument
- это просто указатель на независимо от того, в каком текущем документе находится узел. Почти каждый сценарий использования contains
включает проверку специфических document
для присутствия узла. У вас есть 0 гарантий, что ownerDocument
- это тот же документ, который вы хотите проверить, - только вы это знаете. Опасность ownerDocument
заключается в том, что кто-то может ввести любое количество способов ссылки, импорта или создания узлов, которые находятся в других документах. Если они это сделают, и вы написали свой код, опираясь на относительный вывод ownerDocument
, ваш код может сломаться. Чтобы гарантировать, что ваш код всегда дает ожидаемые результаты, вы должны сравнивать только с , на который конкретно ссылаются document
, который вы собираетесь проверять, а не доверять относительным выводам, таким как ownerDocument
.