判断2个节点间是否存在包含关系,即是否存在父子之间的关系,我们可以使用:
elA.contains(elB)
方法,如果elA是elB的祖先,则返回true.
//判断 <html>元素是否包含<body>元素
alert(document.documentElement.contains(document.body)); //true
IE,Chrome,Opera8+,Safari3+支持该属性,Firefox不支持该方法,不过,它提供了另外一个方法:
elA.compareDocumentPosition(elB)
,它返回一个"位掩码"来表示节点间的关系。返回值如下:
Mask |
含义 |
1 |
无联系,elB不在elA所在的document中 |
2 |
之前,elB在elA之前(DOM tree上的位置) |
4 |
之后,elB在elA之后(DOM tree上的位置) |
8 |
包含,elB包含elA |
16 |
被包含,elB被包含在elA |
//例如:
//因为 <body>在<html>之后,且被包含,所以值为 4 + 16 = 20;
alert(document.documentElement.contains(document.body)); //20
因此,跨浏览器的包含判断函数如下:
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;
}
}
分享到:
相关推荐
在HTML文档中,每个元素都可以看作一个节点,包括元素节点、属性节点和文本节点。元素节点是最常见的,比如`<div>`、`<a>`等,它们定义了网页的结构和内容。当我们谈论访问某个页面节点时,通常是指通过JavaScript或...
7. **测试**:编写单元测试和集成测试,确保你的数据访问层按预期工作,节点和关系的创建、更新和删除都正确无误。 标签“阿达”可能是个人或者团队的名字,也可能代表项目代号。不过,具体含义没有在给定的信息中...
树形结构模拟了现实世界中的层次关系,每个节点可以有零个或多个子节点,除了根节点之外,每个节点都有一个父节点。在处理这类数据时,递归是一种非常有效的方法。本篇文章将详细介绍如何在Java中使用递归来实现从父...
这里的`parents`属性可能是存储节点间关系的方式,具体实现会因场景和需求而异。 标签中的“源码”可能暗示了该博客提供了实际的代码示例,而“工具”可能意味着这个方法可以应用于某些实用工具或框架中。由于没有...
单链表是一种基础的数据结构,常用于存储线性序列数据,其每个节点包含数据和一个指向下一个节点的指针。在单链表中,头部插入节点是常见的操作之一,尤其在面试和笔试中常被用来考察对数据结构的理解和编程能力。 ...
4. **广度优先搜索(BFS)**:另一种遍历树的方法,先访问根节点,然后访问所有一级子节点,接着是所有二级子节点,以此类推。虽然在这个问题中DFS可能更为直观,但在某些特定场景下,BFS也可能是合适的解决方案。 ...
15. ownerDocument:返回包含此节点的根文档(只读) 16. parentNode:返回父节点(只读) 17. Parsed:返回此节点及其子节点是否已经被解析(只读) 18. Prefix:返回名称空间前缀(只读) 19. preserveWhiteSpace...
1. **生成邻接矩阵或邻接列表**:这是表示网络中节点间连接关系的数据结构。邻接矩阵是一个二维数组,邻接列表则是一个更节省空间的链表结构。 2. **遍历网络**:使用深度优先搜索(DFS)或广度优先搜索(BFS)算法...
例如,在单链表中,每个节点包含一个数据域和一个指向下一个节点的链接;而在双向链表中,每个节点还包含一个指针回溯到前一个节点。 2. **树形数据结构中的节点**:树是一种非线性的数据结构,由节点和边构成。每...
学习DOM时,理解节点间的层次关系至关重要,每个节点都可以视为树结构中的一个单元,通过节点的属性和方法可以构建、查询和修改整个文档结构。因此,掌握这些基本概念和操作对于JavaScript开发者来说是必不可少的。
节点之间通过父节点、子节点和兄弟节点的关系相互关联。 #### 五、总结 DOM 提供了一种强大的机制来操作和查询 HTML 或 XML 文档。通过理解 DOM 中的核心属性和方法,开发者可以更加高效地处理网页内容和结构。...
接口规范部分定义了如何访问和操作这些节点,包括消息格式、通信协议以及请求和响应的处理方式。这通常涉及到使用SOAP(简单对象访问协议)和HTTP(超文本传输协议)进行数据交换,以及XML(可扩展标记语言)用于...
`TreeView`控件在用户界面中表现为一个可展开/折叠的树形结构,每个节点代表一个条目,节点之间通过层级关系进行连接。本示例主要探讨`TreeView`节点的操作,包括添加、删除、修改和遍历等基本操作。 1. **添加节点...
通过`-[CCDirector sharedDirector] touchDispatcher`,我们可以访问触摸调度器,它负责将触摸事件分发给注册了相应事件处理方法的节点。 接着,我们来看`精灵(Sprite)`。在Cocos2d中,精灵是基本的可绘制图形...
- **节点浏览**:ZooInspector 允许用户逐级深入查看 ZooKeeper 中的所有 znode,包括它们的数据、子节点以及权限设置。 - **数据编辑**:用户可以直接通过界面编辑 znode 的数据内容。 - **权限查看**:可以查看...
在整个实现过程中,需要注意的是,为了保持良好的代码结构和可维护性,可以将节点与菜单项的映射关系以及处理逻辑封装在单独的类或方法中。此外,对于大型项目,可能还需要考虑性能优化,例如通过缓存已构建的菜单来...
- 使用`map`来存储节点间的父子关系,键是父节点的标识,值是一个`vector`,包含了该父节点的所有子节点。 - 当添加新节点时,可以在`map`中找到其父节点,然后将新节点插入到该父节点对应的`vector`中。 - 遍历...
`Form1.Designer.cs`文件包含了窗体设计时的布局信息,而`WindowsFormsApplication174.csproj`是项目文件,用于管理项目的构建设置和依赖关系。`DepartmentsDataSet.xsc`、`DepartmentsDataSet.xsd`和`.Designer.cs`...
Flex Tree(灵活的树)是一种能够动态展示层级关系的组件,广泛应用于各种业务场景,例如文件系统、组织结构、菜单导航等。本主题将深入探讨如何在Flex Tree中实现自定义节点图标,以及与之相关的源码分析。 1. **...
每个节点知道其父节点的编号,子节点列表则包含其下属的所有节点编号。 3. **菜单遍历**:利用节点编号,可以很容易地遍历整个菜单树。例如,通过从根节点开始,递归地访问每个子节点,可以显示整个菜单层次。 4. ...