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

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()方法不能正常使用。

时间: 2024-10-12 09:51:57

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

BOM学习3--navigator对象跨浏览器检测插件

一,检测插件: 随着互联网的发展,HTML5的标准也成为开发网页的标准,其中比如H5的video标签,就可以直接嵌入到网页成为一个播放器,这就把传统的Flash播放器的功能给取代了.我们在开发不同的项目,可能会依据项目的不同需求,选择使用H5播放器或者Flash插件,这就需要我们在浏览器中识别安装的插件,下面就是一个跨浏览器的插件检测方法: 1,对于非IE浏览器,我们可以直接使用plugins这个数组来遍历插件,下面是数组每一项包含的属性: name: 插件的名字, description:插件

4.6 找出二叉树中指定节点的下一个节点(中序后继),假定每个节点有父指针。

5 / 2 6 / \ 1 4 7 / 3 class Node{ Node left; Node right; Node parent; int val; } /** 1.如果有右子树,则结果为右子树的最左节点. 2.如果没有右子树,则需要回到父节点,如果当前节点是父节点的左子树,则父节点就是结果,如果不是继续向上再找父节点. */ public TreeNode inorderSucc(TreeNode n){ if(n==null) return null; if(n.right!=nul

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

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){ r

js之判断一个节点是不是另一个节点的子节点

JavaScript浏览器检测之navigator 对象

一.使用客户端检测的原因 由于每个浏览器都具有自己独到的扩展,所以在开发阶段来判断浏览器是一个非常重要的步骤. 虽然浏览器开发商在公共接口方面投入了很多精力,努力的去支持最常用的公共功能: 但在现实中,浏览器之间的差异,以及不同浏览器的“怪癖”却是非常多的,因此客户端检测除了是一种补救措施,更是一种行之有效的开发策略. 二.navigator 对象概述 navigator 对象最早由 Netscape Navigator2.0 引入的 navigator 对象,现在已经成为识别客户端浏览器的事实

第一百四十节,JavaScript,封装库--浏览器检测

JavaScript,封装库--浏览器检测 在函数库编写一个,浏览器检测对象 /** sys浏览器检测对象,对象下有两个属性,liu_lan_qi属性和xi_tong属性 * liu_lan_qi属性,检测浏览器名称和版本号,如:alert(sys.liu_lan_qi); * xi_tong属性,检测浏览器运行环境,如:alert(sys.xi_tong); **/ (function () { //闭包,自我执行 window.sys = {}; //全局变量对象,保存浏览器信息 var u

58 - 二叉树的中序遍历的下一个节点

题目: 给定一棵二叉树和其中的一个节点,如何找出中序遍历顺序的下一个节点?树中的节点除了由两个分别指向左右节点的指针外,还有一个指向父节点的指针. 中序遍历:先访问当前节点的左子树,再访问当前节点本身,最后访问当前节点的右子树. 因此: 如果给定节点有右子树,则下一个节点是它的右子节点: 如果给定节点没有右子树,需要向上找到一个祖父节点(它是自己父节点的左节点),该祖父节点的父节点就是下一个节点.如果没有找到,返回NULL. 中序遍历顺序为:428591637 如上图中,给定节点9,则无右节点,

javascript 获取dom书的下一个节点。

利用javascript 写一个在页面点击加减按钮实现数字的累加.. 简略的html大概如此.看得懂就好不要在意这些细节啊 1 <input type="button" value="+" onclick="jia(this)" /> 2 <label class="num">0</label> 3 <input type="button" value="

剑指offer(57)二叉树的下一个节点

题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 题目分析 这题一定要画图,因为只有画图我们才能分清楚下一个节点有哪些情况 1.如果一个节点有右子树,那么它的下一个节点就是它的右子树中的最左子节点.也就是说,从右子节点出发一直沿着指向左子节点的指针,我们就能找到下一个节点. 2.如果没有右子树,又可以分为两种情况 如果节点是它父节点的左子节点,那么它的下一个节点就是它的父节点. 如果一个节点既没有右子