JS中通用的contains方法判断两个节点的关系
2017-10-30 15:10
429 查看
“我生本无乡,心安是归处”
这个函数组合使用了三种方式来确定一个节点是不是另一个节点的后代。函数的第一个参数是参考节点,第二个参数是要检查的节点。在函数体内,首先检测 refNode 中是否存在 contains() 方法(能力检测)。这一部分代码还检查了当前浏览器所用的 WebKit 版本号。如果方法存在而且不是 WebKit( !client.engine.webkit ),则继续执行代码。否则,如果浏览器是 WebKit 且至少是 Safari 3(WebKit版本号为 522 或更高),那么也可以继续执行代码。在 WebKit 版本号小于 522 的 Safari 浏览器中,contains() 方法不能正常使用。
接下来检查是否存在 compareDocumentPosition() 方法,而函数的最后一步则是自 otherNode开始向上遍历 DOM 结构,以递归方式取得 parentNode ,并检查其是否与 refNode 相等。在文档树的顶端, parentNode 的值等于 null ,于是循环结束。这是针对旧版本 Safari 设计的一个后备策略
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; } }
这个函数组合使用了三种方式来确定一个节点是不是另一个节点的后代。函数的第一个参数是参考节点,第二个参数是要检查的节点。在函数体内,首先检测 refNode 中是否存在 contains() 方法(能力检测)。这一部分代码还检查了当前浏览器所用的 WebKit 版本号。如果方法存在而且不是 WebKit( !client.engine.webkit ),则继续执行代码。否则,如果浏览器是 WebKit 且至少是 Safari 3(WebKit版本号为 522 或更高),那么也可以继续执行代码。在 WebKit 版本号小于 522 的 Safari 浏览器中,contains() 方法不能正常使用。
接下来检查是否存在 compareDocumentPosition() 方法,而函数的最后一步则是自 otherNode开始向上遍历 DOM 结构,以递归方式取得 parentNode ,并检查其是否与 refNode 相等。在文档树的顶端, parentNode 的值等于 null ,于是循环结束。这是针对旧版本 Safari 设计的一个后备策略
相关文章推荐
- javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
- 由于设计页面需要,要把两个并排显示的 div 实现一样高的效果, n 行 n 列布局,每列高度(事先并不能确定哪列的高度)相同,每个设计师追求的目标。方法有以下几种: 1 JS 实现(判断 2 个 d
- JS判断非空至少输入两个字符的简单实现方法
- javascript contains方法来判断元素包含关系
- js通用方法获取元素,节点父子关系查找
- [转]contains和compareDocumentPosition 方法来确定是否DOM节点间的关系
- JS/jQuery判断DOM节点是否存在的简单方法
- JS 数组的删除与判断是否存在的两个扩展方法
- js判断两个日期是否相等的方法
- js中判断由字符串from和to代表的两个日期的先后关系
- contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
- js判断两个数组中元素的包换关系
- js判断两个日期是否相等的方法
- JS判断两个对象内容是否相等的方法示例
- 使用原生js获取的节点样式不能作为判断条件,封装获取节点样式方法
- contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
- js判断两个日期是否相等的方法
- contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
- contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
- javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系