查找一个节点是不是另外一个节点的后代
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 就说明成立了 在用两个逻辑操作符返回布尔值。
第三个就是两个方法都不支持,用循环来一级一级的查找。
相关文章推荐
- maven使用相关小问题
- [知识点]可持久化线段树
- jforum二次开发相关笔记——(一)页面请求机制
- CSDN第一天-学习MarkDown
- kali linux 1.2 下载
- 如何提高c代码运行效率
- 程序日志--ios“迷你秒表”程序
- ontainer_of()宏
- 去掉 微软win10 免费升级提示 找不到KB3035583的一种方案
- MATLAB中从.fig文件导出数据
- (FFOS Gecko) Telemetry - System Update
- php无法保存SESSION问题总汇
- NOI2013 树的计数
- 数据结构——二叉树遍历、深度、叶子节点数计算
- Eclipse中设置换行
- UIBarButtonItem类目-返回一个有图片的导航栏按钮
- 【caffe】用训练好的imagenet模型分类图像
- 交换和路由的区别
- iOS 设计模式系列:Facade – 外观模式
- 区分几种指针