DOM是针对HTML和XML文档的一个API,描绘了一个层次化的节点树,允许开发人员添加、修改、删除节点的一部分。

DOM将HTML和XML文档描绘成一个有多个节点构成的结构,节点分为12种不同的节点类型,每种都拥有自己的特点、数据和方法,并且和其他节点存在着某种关系。

html元素称为文档元素,所有的元素都包含在文档元素中,并且每个文档只有一个html元素。

1 Node类型

DOM1级定义了Node接口,该接口由DOM中的所有节点类型实现。这个接口在JavaScript中是作为Node类型实现的。因此JavaScript中所有的节点类型都继承Node类型,所有的类型都共享着相同的基本属性和方法。

  1. Node.ELEMENT_NODE (1)
  2. Node.ATTRIBUTE_NODE (2)
  3. Node.TEXT_NODE (3)
  4. Node.CDATA_SECTION_NODE (4)
  5. Node.ENTITY_REFERENCE_NODE(5)
  6. Node.ENTITY_NODE (6)
  7. Node.PROCESSING_INSTRUCTION_NODE (7)
  8. Node.COMMENT_NODE (8)
  9. Node.DOCUMENT_NODE (9)
  10. Node.DOCUMENT_TYPE_NODE (10)
  11. Node.DOCUMENT_FRAGMENT_NODE (11)
  12. Node.NOTATION_NODE (12)

由于IE没有公开构造函数,因此上述代码不能在IE中使用。所以为了确保跨浏览器的兼容性,判断Node类型的方法如下:

  1. if(someNode.nodeType == 1){
  2. alert("this is a element node!");
  3. }

1.1 nodeName和nodeValue

可以利用nodeName和nodeValue属性了解node的具体信息,这两个值和节点的类型有关。

  1. if(someNode.nodeType == 1){
  2. value = someNode.nodeName;
  3. //对于元素节点,nodeName保存的是元素的标签名,nodeValue始终为null
  4. }

1.2 节点关系

文档中所有节点相互之间都有关系,包括父子关系,同胞关系。

每个节点都有childNodes属性,保存着一个NodeList对象,NodeList是一种类数组的对象,可以使用childeNode[0],childNode.item(1)来访问,同时拥有length属性,但并不是Array实例。

  • parentNode:指向文档树种的父节点
  • nextSibling:紧挨着当前节点的下一个节点
  • previousSibling:紧挨着当前节点的上一个节点
  • firstChild:表现某一节点的第一个节点,childNodes[0]
  • lastChild:表示某一节点的最后一个子节点,childeNodes[childNodes.length-1]

1.3 节点操作

  • hasChildNodes()方法:判定一个节点是否有子节点,有返回true,没有返回false
  • removeChild()方法:去除一个节点
  • appendChild()方法:添加一个节点,如果文档树中已经存在该节点,则将它删除,然后在新位置插入
  • replaceChild(node1,node2)方法:从文档树中删除指定的节点node2,插入节点node1,被替换的节点仍然在文档中,但是没有位置
  • insertBefore(node1,node2)方法:在指定节点node2的前面插入节点node1,并返回node1.如果已经存在,则删除原来的,然后在新位置插入
  • cloneNode()方法:复制一个节点,该方法有一个参数,true表示深复制,false表示浅复制。不会复制属性,处理程序等。

2 Doucument类型

document对象是HTMLDocument(继承自Document类型)的一个实例,表示整个html页面或其他基于xml的文档。并且document是window对象的一个属性,可以将其当做全局对象来访问。

类型
nodeType 9
nodeName #document
nodeValue null
parentNode null

2.1 文档子节点

Document的子节点可以是DocumentType、Element、ProcessingInstructior或Comment,有两个访问节点的快捷方式:

  • documentElement,该属性一直指向页面中的html元素。
  • childNodes,直接访问文档元素。
  • document.body,直接指向body元素
  • doucment.doctype,取得标签的信息

文档类型是只读的,而且它只有一个元素节点,通常早已存在。

2.2 文档信息

document对象有一些标准的Document对象所没有的属性,提供了 document对象所表现的网页的一些信息。


  1. //取得文档标题
  2. var title = document.title;
  3. //设置文档标题
  4. document.title = "New page title";
  5. //取得完整的URL
  6. var url = document.URl;
  7. //取得域名
  8. var domain = document.domain;
  9. //取得来源页面的URL
  10. var referrer = document.referrer;
  11. document.bgColor //设置页面背景色
  12. document.fgColor //设置前景色(文本颜色)
  13. document.linkColor //未点击过的链接颜色
  14. document.alinkColor //激活链接(焦点在此链接上)的颜色
  15. document.vlinkColor //已点击过的链接颜色
  16. document.fileCreatedDate //文件建立日期,只读属性
  17. document.fileModifiedDate //文件修改日期,只读属性
  18. document.fileSize //文件大小,只读属性
  19. document.cookie //设置和读出cookie
  20. document.charset //设置字符集 简体中文:gb2312
  21. document.body //指定文档主体的开始和结束等价于body>/body>
  22. document.body.bgColor //设置或获取对象后面的背景颜色
  23. document.body.link //未点击过的链接颜色
  24. document.body.alink //激活链接(焦点在此链接上)的颜色
  25. document.body.vlink //已点击过的链接颜色
  26. document.body.text //文本色
  27. document.body.innerText //设置body>.../body>之间的文本
  28. document.body.innerHTML //设置body>.../body>之间的HTML代码
  29. document.body.topMargin //页面上边距
  30. document.body.leftMargin //页面左边距
  31. document.body.rightMargin //页面右边距
  32. document.body.bottomMargin //页面下边距
  33. document.body.background //背景图片

2.3 查找元素

Document类型提供两个查找元素的方法:

  1. getElementById(),如果找到相应的元素则返回该元素,如果不存在带有相应ID的元素,则返回null。
  2. getElementByTagName(),返回包含零或多个元素的NodeList,在HTMl文档中,这个方法会返回一个HTMLCollection对象,与NodeList非常类似。其中THMLCollection对象有一个方法namedItem()
  3. getElementsByName(),会返回带有给定name特性的所有元素。

  1. var images = document.getElementsByTagName("img");
  2. alert(images.length);//输出图像的数量
  3. alert(images[0].src);//输出第一个图像元素的src特性
  4. alert(images.item(0).src);//输出第一个图像元素的src特性
  5. //根据name获取单个相片
  6. var myImage = images.namedItem("myImage");
  7. myImage = images["myImage"];

2.4 文档写入

document.write()方法可以用在两个方面:

  1. 页面载入过程中用实时脚本创建页面内容
  2. 用延时脚本创建本窗口或新窗口的内容

只有当页面被加载的时候document.write()函数才会被执行

doucment.writeln()与上述类似,区别在于换行。
open()和close()分别用于打开和关闭网页的输出流,如果在页面加载期间使用write(),则不需要用这两个方法。

3 Element类型

Element类型用于表现XML或HTML元素,提供了对元素标签名、子节点及特性的访问。

类型
nodeType 1
nodeName 元素的签名
nodeValue null
parentNode Documnet或Element

3.1 HTML元素

所有的HTML元素都是有HTMLElement类型表示,HTMLElement类型直接继承自ELement并添加一些属性。添加的这些属性分别对应于每个HTML元素中都存在的下列标准特性。

  1. var div = document.getElementById("myDiv");
  2. //可以获取和设置属性的值
  3. alert(div.id);
  4. alert(div.className);
  5. alert(div.title);
  6. alert(div.lang);
  7. alert(div.dir); //获取元素的文字方向

3.2 操作特性

getAttribute():用来获取相应元素或其内容的附加信息,与上述获取属性基本一致,但是有两点区别:

  1. style,通过getAttribute()获取的是CSS文本,通过属性获取的会返回一个对象。
  2. onclick,getAttribute()获取相应代码的字符串,属性获取则会返回一个JavaScript函数。

一般情况下,开发人员最好使用对象的属性,只要在取得自定义特征值的情况下,才会使用getAttribute()

setAttribute():接收两个参数,要设置的特性名和值,如果特性已经存在,会修改特性值,如果不存在则会创建。

removeAttribute():用于彻底删除元素的特性,IE6及之前的版本不支持此方法。

3.3 创建元素

document.createElement()方法可以创建新元素,此方法只接收一个参数,即要创建元素的标签名(不区分大小)。

  1. /*** div创建插入过程 ***/
  2. var div = document.createElement("div");
  3. div.id = "myNewDiv";
  4. div.className = "box";
  5. document.body.appendChild(div);

JavaScript中DOM的层次节点(一)的更多相关文章

  1. day29—JavaScript中DOM的基础知识应用

    转行学开发,代码100天——2018-04-14 JavaScript中DOM操作基础知识即对DOM元素进行增删改操作.主要表现与HTML元素的操作,以及对CSS样式的操作.其主要应用知识如下图: 通 ...

  2. javascript中DOM部分基础知识总结

    1.DOM介绍      1.1 DOM概念      文档对象模型(Document Object Model),它定义了访问和处理HTML文档的标准方法.现在我们主要接触到的是HTML DOM. ...

  3. Javascript中DOM技术的的简单学习

    第十四课DOM技术概述1:DOM概述 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节 ...

  4. JAVAScript中DOM与BOM的差异分析

    JAVAScript 有三部分构成,ECMAScript,DOM和BOM,根据浏览器的不同,具体的表现形式也不尽相同.我们今天来谈一谈DOM和BOM这俩者之间的差异. 用百科上的来说: 1. DOM是 ...

  5. javascript之DOM(一节点类型Node)

    DOM(Document Object Model)是针对HTML和XML文档的一个API.DOM描述的是一个层次化的节点树,允许开发人员添加.移除和修改页面的某一部分.起源于DHML,现为W3C的推 ...

  6. js学习笔记----JavaScript中DOM扩展的那些事

    什么都不说,先上总结的图~   Selectors API(选择符API) querySelector()方法 接收一个css选择符,返回与该模式匹配的第一个元素,如果没有找到匹配的元素,返回null ...

  7. javascript之DOM编程设置节点插入节点

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. JavaScript中DOM查询封装函数

    在JavaScript中可以通过BOM查询html文档中的元素,也就是所谓的在html中获取对象然后对它添加一个函数. 常用的方法有以下几种: ①document.getElementById() 通 ...

  9. JavaScript中DOM(第二天)

    DOM document object model,文档对象模型,也叫dom树:dom是由节点组成的.html标签称为标签节点,属性称为属性节点: console.log(docment);即可输出d ...

随机推荐

  1. 为什么无论你怎么设置自定义的外层div的高度,easyui的动态添加的tab的高度还是不变高

    由以下代码可知,easyui自动将panel的height设置为了固定的150px高度!

  2. hibernate--ID生成策略--annotation

    annotation: @GeneratedValue a) 自定义ID b)auto: 对mysql默认使用auto_increment, 对oracle使用hibernate_sequence c ...

  3. Cannot call sendError() after the response has been committed - baiyangliu - 博客频道 - CSDN.NET

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  4. (中等) HDU 5293 Tree chain problem,树链剖分+树形DP。

    Problem Description   Coco has a tree, whose vertices are conveniently labeled by 1,2,…,n.There are ...

  5. iOS开发——WAVE音频文件解析

    WAV文件也分了好几类,相应的非数据信息存储在文件的头部,下面简单的提一下,然后在最后重点介绍44字节的那种,一般用的都是这个. 1.8KHz采样.16比特量化的线性PCM语音信号的WAVE文件头格式 ...

  6. Android.mk文件详解(转)

    源:Android.mk文件详解 从对Makefile一无所知开始,折腾了一个多星期,终于对Android.mk有了一个全面些的了解.了解了标准的Makefile后,发现Android.mk其实是把真 ...

  7. ios上 更改 状态栏(UIStatusBar)的颜色,你值得一看、收藏

    IOS上 关于状态栏的相关设置(UIStatusBar) 知识普及 ios上状态栏 就是指的最上面的20像素高的部分 状态栏分前后两部分,要分清这两个概念,后面会用到: 前景部分:就是指的显示电池.时 ...

  8. IOS软件国际化(本地化Localizable)

    IOS软件国际化(本地化Localizable) iPhone是支持语言最多的手机,它支持各国语言及中国少数名族如蒙古等语言,这也是好多少数名族都用苹果的原因.在这一点上我们自主品牌还是要多学习学习. ...

  9. UVa 11110 - Equidivisions

    题目大意:给一个n*n的矩阵,其中放置n个数字,判断四连通的相同数字的个数是否等于n. Flood fill,本来没什么,用dfs判断一下就可以了,可是用scanf读取输入时TLE了,然后看到别人说要 ...

  10. bzoj3551

    3551: [ONTAK2010]Peaks加强版 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 877  Solved: 297[Submit][S ...