原生 JS 实现判断元素是否是某一元素的子元素

 其实这是一个双向判断,既可以判断某一元素是否是另一元素的子元素,也可以判断另一元素是否是某元素的父元素。这里主要介绍两种方式,一种是原生 JS 实现,一种是 HTML5 新增的原生方法。

 纯 JS 实现

这里主要运用到了递归,就是不断地通过循环判断元素的父元素是否是目标元素。

function isChildNode(node, parentNode) {
    // 非空判断
    if (node && parentNode) {
    	// 如果parentNode已经是顶层,直接返回true
        if (parentNode === document) {
            return true;
        }
        // 如果 node 和 parentNode 相同,则递归结束
        if (node === parentNode) {
            return true;
        }
        // 继续递归
        return isChildNode(node.parentNode, parentNode);
    } else {
    	// 递归结束
        return false
    }
}

HTML5 原生方法

这是 html5新增的方法,存在兼容性问题,自行取舍。

document.contains(document.body)
// true
document.contains(document.documentElement)
// true