码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-07-28 16:09:04      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

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  就说明成立了 在用两个逻辑操作符返回布尔值。

第三个就是两个方法都不支持,用循环来一级一级的查找。 

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:

原文地址:http://blog.csdn.net/u011551941/article/details/47104745

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!