如果一个元素包含在另一个元素中,如何签入Javascript

2022-08-30 00:24:19

如何检查一个 DOM 元素是否是另一个 DOM 元素的子元素?是否有任何内置方法可以做到这一点?例如,类似下面的内容:

if (element1.hasDescendant(element2)) 

if (element2.hasParent(element1)) 

如果不是,那么任何想法如何做到这一点?它还需要跨浏览器。我还应该提到,孩子可以嵌套在父母的下方许多级别。


答案 1

您应该使用 ,因为它现在是标准的,并且可在所有浏览器中使用。Node.contains

https://developer.mozilla.org/en-US/docs/Web/API/Node.contains


答案 2

更新:现在有一种原生方法可以实现这一目标。Node.contains().在评论和下面的答案中也提到过。

旧答案:

使用父节点属性应该可以正常工作。从跨浏览器的角度来看,它也非常安全。如果已知关系是一个层次的深度,您可以简单地检查它:

if (element2.parentNode == element1) { ... }

如果子项可以任意嵌套在父项的深处,则可以使用类似于以下内容的函数来测试关系:

function isDescendant(parent, child) {
     var node = child.parentNode;
     while (node != null) {
         if (node == parent) {
             return true;
         }
         node = node.parentNode;
     }
     return false;
}