JS高程3:DOM-节点层次
2024-08-25 01:33:52
DOM是一个API,通过该API可以操作HTML文档或者XML文档。
DOM将HTML或者XML文档描绘成一个多层节点结构。
文档节点是HTML或者XML文档的根节点,同时也是其他节点的根节点,因为每个文档中只能有一个文档节点。
Node类型
DOM1中定义了一个Node接口。该接口在JS中是通过Node类型来实现。
JS中所有节点类型都继承自Node类型。
每个节点都有一个nodeType属性,表示该节点的类型。节点类型由12个数字来表示:
Node.ELEMENT_NODE(1);
Node.ATTRIBUTE_NODE(2);
Node.TEXT_NODE(3);
Node.CDATA_SECTION_NODE(4);
Node.ENTITY_REFERENCE_NODE(5);
Node.ENTITY_NODE(6);
Node.PROCESSING_INSTRUCTION_NODE(7);
Node.COMMENT_NODE(8);
Node.DOCUMENT_NODE(9);
Node.DOCUMENT_TYPE_NODE(10);
Node.DOCUMENT_FRAGMENT_NODE(11);
Node.NOTATION_NODE(12)。
通过比较上面这些常量,可以很容易地确定节点的类型,例如:
if (document.nodeType == Node.DOCUMENT_NODE){ //在 IE 中无效
alert("Node is a document.");
}
当然,为了跨浏览器,可以这样写:
if (someNode.nodeType == 1){ //适用于所有浏览器
alert("Node is an element.");
}
nodeName和nodeType属性
对于元素节点, nodeName 中保存的始终都是元素的标签名,而 nodeValue 的值则始终为 null。
节点关系
每个节点都有一个 childNodes 属性,其中保存着一个 NodeList 对象。
访问保存在 NodeList 中的节点——可以通过方括号,也可以使用 item()方法。
将 NodeList 对象转换为数组 :
//在 IE8 及之前版本中无效
var arrayOfNodes = Array.prototype.slice.call(someNode.childNodes,0);
跨浏览器实现:
function convertToArray(nodes){
var array = null;
try {
array = Array.prototype.slice.call(nodes, 0); //针对非 IE 浏览器
} catch (ex) {
array = new Array();
for (var i=0, len=nodes.length; i < len; i++){
array.push(nodes[i]);
}
}
return array;
}
每个节点都有一个 parentNode 属性,该属性指向文档树中的父节点。
使用列表中每个节点的 previousSibling和 nextSibling 属性,可以访问同一列表中的其他节点。
另外, hasChildNodes()也是一个非常有用的方法,这个方法在节点包含一或多个子节点的情况下返回 true。
所有节点都有的最后一个属性是 ownerDocument,该属性指向表示整个文档的文档节点。
操作节点
最新文章
- log4j 日志信息的引入(通用版)——解决项目运行过程中的日志信息
- C#的 构造函数 和 方法重载
- 用c#开发微信 (10) JS-SDK 基本用法- 分享接口“发送到朋友”
- android坐标
- Oracle 直方图实例测试
- 关于网上流传的四个原版Windows XP_SP2全面了解
- maven中如何打包源代码
- 稀疏表示(sparse representation)和字典学习
- careercup-排序和查找 11.1
- android 国内sdk下载地址及代理, android 环境搭建
- .Net多线程编程—Parallel LINQ、线程池
- getstyle() 获取样式
- Excel 2010高级应用-气泡图(八)
- 【安卓中的缓存策略系列】安卓缓存策略之磁盘缓存DiskLruCache
- [ffmpeg] 多输入滤波同步方式(framesync)
- 图像处理、显示中的行宽(linesize)、步长(stride)、间距(pitch)
- 逆袭之旅DAY14.东软实训.Oracle.多表连接、分组函数、子查询
- python高并发和多线程的关系
- vs2017 编译JRTPLIB
- jQuery事件处理
热门文章
- eclipse 性能调优之内存分配
- 【Morn UI系列教程】Morn简介及使用教程
- osx的10款文本编辑器
- Binary Tree Preorder Traversal -- leetcode
- ylbtech-LanguageSamples-NamedAndOptional(命名和可选参数)
- centos7 安装selenium和firefox
- Python Matplotlib绘制气温图表
- rocketmq的线程服务基类
- [HTML5] Add an SVG Image to a Webpage and Get a Reference to the Internal Elements in JavaScript
- [Tools] Unlock TypeScript&#39;s Features in Vanilla JS with @ts-check and JSDoc