您的位置:首页 > 其它

查找一个节点是不是另外一个节点的后代

2015-07-28 14:56 183 查看
var contains=(function(){
if(typeof document.documentElement.contains){
return function(refNode,otherNode){
return refNode.contains(otherNode);
}
}else if(typeof document.documentElement.compareDocumentPosition){
return function(refNode,otherNode){
return !!(refNode.compareDocumentPosition(otherNode) & 16)
}
}else{
return function(refNode,otherNode){
var node=otherNode.parentNode;
do{
if(node===refNode){
return true;
}else{
return;
}
}while(node!==null)
}
}
})()

三个可能性,第一个是看浏览时支持contains方法,如果是的话就返回函数给变量作为它的值。

第二个也是一个检查两者关系的DOM方法,不过它返回的是一个关系的位掩码,

1 代表无关 2 代表给定的在参考的之前 4 给定的在参考之后 8给定的是参考的祖先 16给定的是参考的后代

我测试之后发现他会返回两个掩码比如说:

alert(!!(document.documentElement.compareDocumentPosition(document.body) & 16));


它返回的20 body即在HTML后面 也在是它的后代16+4等于20。 然后在进行按位与操作 和16比较 得出结果如果是非0 就说明成立了 在用两个逻辑操作符返回布尔值。

第三个就是两个方法都不支持,用循环来一级一级的查找。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: