这是一个更简单的方法,它使用标准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 导入文档生成的节点,并使用该节点的ownerDocument
属性来检查您认为主要的视觉呈现的内容是否存在document
,你会在一个受伤的世界里。
node 属性ownerDocument
只是指向节点所在的当前文档的指针。几乎每个用例都contains
涉及检查特定 document
节点是否存在。你有 0 保证这ownerDocument
是你想检查的同一个文件——只有你知道。危险ownerDocument
在于有人可能会引入多种方法来引用、导入或生成驻留在其他文档中的节点。如果他们这样做,并且您编写的代码依赖于ownerDocument
' 的相对推断,您的代码可能会中断。为确保您的代码始终产生预期结果,您应该只与您打算检查的具体引用 进行比较,而不是信任相对推论,例如.document
ownerDocument