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,该属性指向表示整个文档的文档节点。

操作节点

最新文章

  1. log4j 日志信息的引入(通用版)——解决项目运行过程中的日志信息
  2. C#的 构造函数 和 方法重载
  3. 用c#开发微信 (10) JS-SDK 基本用法- 分享接口“发送到朋友”
  4. android坐标
  5. Oracle 直方图实例测试
  6. 关于网上流传的四个原版Windows XP_SP2全面了解
  7. maven中如何打包源代码
  8. 稀疏表示(sparse representation)和字典学习
  9. careercup-排序和查找 11.1
  10. android 国内sdk下载地址及代理, android 环境搭建
  11. .Net多线程编程—Parallel LINQ、线程池
  12. getstyle() 获取样式
  13. Excel 2010高级应用-气泡图(八)
  14. 【安卓中的缓存策略系列】安卓缓存策略之磁盘缓存DiskLruCache
  15. [ffmpeg] 多输入滤波同步方式(framesync)
  16. 图像处理、显示中的行宽(linesize)、步长(stride)、间距(pitch)
  17. 逆袭之旅DAY14.东软实训.Oracle.多表连接、分组函数、子查询
  18. python高并发和多线程的关系
  19. vs2017 编译JRTPLIB
  20. jQuery事件处理

热门文章

  1. eclipse 性能调优之内存分配
  2. 【Morn UI系列教程】Morn简介及使用教程
  3. osx的10款文本编辑器
  4. Binary Tree Preorder Traversal -- leetcode
  5. ylbtech-LanguageSamples-NamedAndOptional(命名和可选参数)
  6. centos7 安装selenium和firefox
  7. Python Matplotlib绘制气温图表
  8. rocketmq的线程服务基类
  9. [HTML5] Add an SVG Image to a Webpage and Get a Reference to the Internal Elements in JavaScript
  10. [Tools] Unlock TypeScript&#39;s Features in Vanilla JS with @ts-check and JSDoc