JS 判断是否包含节点
一、递归判断
通过递归逐层判断:
/**
* 判断节点是否在指定包裹层中
* @param node 要判断的节点
* @param parent 是否在该容器中
* @returns true 为在反之不在
*/
const hasParent = (node: HTMLElement, parent: HTMLElement | null) => {
while (node) {
if (node === parent) {
return true
}
node = node.parentNode as HTMLElement
}
return false
}
二、Node.contains
通过 Node.contains 方法判断,语法如下:
node.contains(otherNode)
如果 otherNode
是 node 的后代节点或是 node 节点本身。则返回 true
, 否则返回 false
封装如下:
/**
* 判断节点是否在指定包裹层中
* @param node 要判断的节点
* @param parent 是否在该容器中
* @returns true 为在反之不在
*/
const hasParent = (node: HTMLElement, parent: HTMLElement) => {
return parent.contains(node)
}