16 DOM

DOM(文档对象模型)是针对 HTML 和 XML 文档的一个 API(应用程序编程接口)。

DOM 描绘了一个层次化的节点树,允许开发人员添加、移除和修改页面的某一部分。

总共有 12 种节点类型,这些类型都继承自一个基类型Node。

 

1 判断一个节点是不是元素节点,以及是什么元素节点

 

2 判断一个节点是否有子节点

有三种方法:

1 someNode.hasChildNodes()

2 someNode.childNodes.length

3 someNode.firstChild === null && someNode.lastChild === null

 

每个节点都有一个 childNodes 属性,其中保存着一个 NodeList 对象。NodeList 是一种类数组对象。

它实际上是基于 DOM 结构动态查询的结果,因此 DOM 结构的变化能够自动反映在 NodeList 对象中。

我们常说,NodeList 是有生命、有呼吸的对象。

下面的例子展示了如何访问保存在 NodeList 中的节点——可以通过方括号,也可以使用 item()方法。

每个节点都有一个 parentNode 属性,该属性指向文档树中的父节点。

每个节点的 previousSibling和 nextSibling 属性,可以访问同一列表中的其他同胞节点。

父节点的 firstChild 和 lastChild属性分别指向其 childNodes 列表中的第一个和最后一个节点。

 

3 添加节点

最常用的方法是appendChild(),用于向 childNodes 列表的末尾添加一个节点。

如果需要把节点放在 childNodes 列表中某个特定的位置上,而不是放在末尾,那么可以使用insertBefore()方法。

如果参照节点是null,则 insertBefore()与 appendChild()执行相同的操作,如下面的例子所示。

 

4 移除和替换

replaceChild()方法接受的两个参数是:要插入的节点和要替换的节点。

 

如果只想移除而非替换节点,可以使用 removeChild()方法。

这个方法接受一个参数,即要移除的节点。返回值:被移除的节点。

 

5 复制

cloneNode(),用于创建调用这个方法的节点的一个完全相同的副本。

cloneNode()方法接受一个布尔值参数,表示是否执行深复制。

在参数为 true 的情况下,执行深复制,也就是复制节点及其整个子节点树;

在参数为 false 的情况下,执行浅复制,即只复制节点本身。

 

6 Document类型

有两个内置的访问其子节点的快捷方式。

第一个就是 documentElement属性,该属性始终指向 HTML 页面中的<html>元素。

作为 HTMLDocument 的实例, document 对象还有一个 body 属性,直接指向<body>元素。

 

文档标题

 

 

例如,如果 document.URL 等于 http://www.wrox.com/CDA/,那么 document.domain 就等于 www.wrox.com。

在这 3 个属性中,只有 domain 是可以设置的

但由于安全方面的限制,也并非可以给 domain 设置任何值。

 

7 取得页面中的所有元素

一共有三种方法:

getElementById()

getElementsByTagName()

getElementsByName()

要想取得文档中的所有元素,可以向 getElementsByTagName()中传入"*"。

 

8 元素标签名

要访问元素的标签名,可以使用 nodeName 属性,也可以使用 tagName 属性;这两个属性会返回相同的值。

在 HTML 中,标签名都以大写表示;

 

9 取得特性

<div id="myDiv"></div>
<script>
    var div = document.getElementById("myDiv");
    console.log(div.id);
    console.log(div.getAttribute("id"));
</script>

注意:这个方法和通过HTMLElement类型的属性,获得同样的效果。但区别是什么?

区别1:通过 getAttribute()方法也可以取得自定义特性(即标准 HTML 语言中没有的特性)的值。

区别2:有两类特殊的特性,通过属性得到的值与通过 getAttribute()返回的值并不相同。

第一类特性就是 style,用于通过 CSS 为元素指定样式。

通过 getAttribute()访问时,返回的 style 特性值中包含的是 CSS 文本,而通过属性来访问它则会返回一个对象。

第二类与众不同的特性是 onclick 这样的事件处理程序。

 

 

10 设置特性

这个方法接受两个参数:要设置的特性名和值。

如果特性已经存在,setAttribute()会以指定的值替换现有的值;如果特性不存在,setAttribute()则创建该属性并设置相应的值。

通过这个方法设置的特性名会被统一转换为小写形式,即"ID"最终会变成"id"。

 

最后一个方法是 removeAttribute(),这个方法用于彻底删除元素的特性。

 

11 创建元素

 

12 动态的NodeList

理解 NodeList 及其“近亲” NamedNodeMap 和 HTMLCollection,是从整体上透彻理解 DOM 的关键所在。

这三个集合都是“动态的”。

例如,下列代码会导致无限循环:

一般来说,应该尽量减少访问 NodeList 的次数。因为每次访问 NodeList,都会运行一次基于文档的查询。

所以,可以考虑将从 NodeList 中取得的值缓存起来。

posted on 2017-05-01 21:57  modDx  阅读(150)  评论(0)    收藏  举报

导航