跨浏览器检测某个节点是不是另一个节点的后代

1.通常我们使用contains()方法不通过在DOM文档树中查找即可获得这个消息,传入两个参数,一个是祖先节点另一个是需要检测的后台节点。
2.通过compareDocumentPosition()确定节点之间的关系,返回一个表示该关系的位掩码。

掩码节点关系
1  无关(给定的节点不在当前文档中)
2居前(给定的节点在DOM树中)
4居后(给定的节点在DOM树中位于参考节点之后)
8包含(给定的节点是参考节点的祖先)
16被包含(给定节点是参考节点的后代)

 

 

 

 

 

 

function contains(refNode,otherNode){
            if( typeof refNode.contains == "function" && (!client.engine.webkit || client.engine.webkit >= 522)){
                return refNode.contains(otherNode);
            } else if (typeof refNode.compareDocumentPosition == "function"){
                return !!(refNode.compareDocumentPosition(otherNode) & 16)
            } else {
                var node = otherNode.parentNode
                do{
                    if(node === refNode){
                        return true
                    }else{
                        node = node.parentNode
                    }
                }while(node !== null);
                return false
            }
        }
        function getContains(){
            alert(contains(document.documentElement,document.body))
        }

这个函数使用了三种方式来检测。函数的第一个参数是参考节点,第二个参数是检查节点。在函数体内,首先检测refNode中是否存在contains()方法(能力检测)。这一部分代码还检查了当前浏览器所用的Webkit版本号。如果方法存在而且不是Webkit

(!client.engine.webkit),则需要继续执行代码。如果浏览器是webkit且至少是Safari3(WebKit版本号为522或者更高,那么可以继续执行代码),在Webkit版本号小于522的Safari浏览器中,contains()方法不能正常使用。

转载于:https://www.cnblogs.com/daniel-lij/p/7102382.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值