[TOC]
* * * * *
### `Node` 类型
DOM中所有节点的父级类型,后面要讲到的几种类型负责实现这一父类型。
![](https://box.kancloud.cn/d1c5cf1b0ef1e7c8c400e01a797adec3_799x402.png)
>node实例有三个常用属性:
`nodeType`(可以判断这个节点的类型,是元素、注释或属性等);
`nodeName`(元素节点该值为标签名的大写);
`nodeValue`(元素节点的该值为null)。
> 判断是不是元素节点 `someNode.nodeType==1`。
节点类型`nodeType`取值有12种,值为均为常量。
每个节点都有一个`childNodes`属性,其中保存这一个`nodeList`对象(实时更新)。
* * * * *
~~~
读方法:
nodeList[index]
nodeList.item(index)
~~~
~~~
判断有无子节点:
node.hasChildNodes( )
~~~
> 针对节点的操作函数有:增删改、拷贝
~~~
插在子元素列表的最后:
var returnedNode=someNode.appendChild(newNode)
~~~
~~~
在某个位置插入:
var returnedNode=someNode.insertBefore(newNode,someChildNode);
如果这里的定位子元素为null,那么就会被插入到最后
~~~
~~~
替换原来已有的元素:
var returnedNode=someNode.replaceChild(newNode, someChildNode);
~~~
>[success] 对于上面的三个操作,有个规则,如果该节点已经存在于文档中,
那么此节点会自动从原来的位置移除,出现在新位置上;
~~~
删除:
var returnedNode=someNode.removeChild(someChildNode)
高程3里描述:
“替换和删除后,原来的节点还在只是没有了自己的位置 ”,对此我不理解。
~~~
~~~
克隆:
var newList=oldList.cloneNode(true/false);
true 深拷贝,会把子节点也拷贝上;
false 浅拷贝,只是拷贝这个父级元素本身
~~~
* * * * *
**实践:**
:-: ![](https://box.kancloud.cn/3d4a65f20f7b104f9ae37996c1c23967_332x230.png)
![](https://box.kancloud.cn/9e3fa694b7dd6752b2dbe6d06c2cbd8d_716x301.png)
![](https://box.kancloud.cn/a76c9bd4a6f19162ff19c0e26c9f4b04_292x263.png)
* * * * *
### `Document` 类型
这里关心的是浏览器中与`html`相关的类型(抛开`XML`文档),`HTMLDocument`(继承自`Document`)的实例 `document`对象,其表示整个页面。
![](https://box.kancloud.cn/a57c8d6ad94fb8018af1c851115bbb9f_191x119.png)
![](https://box.kancloud.cn/470ee38f936c59806679a830a0210140_362x64.png)
* * * * *
~~~
document.documentElement 取的HTML的整个引用
方法:
.getElementById( )
.getElementsByName( )--可以取出单选元素
如果所求元素不存在就返回null
.getElementsByTagName( )
存在就返回一个 HTMLCollection的实例
读方法: [], item(), namedItem()--通过元素的name属性标识
在引擎处理查询时候,
如果方括号里传入的是数字,就调用 item(),
如果是字符串就调用 namedItem()
特殊集合:
.images .links .forms
文档写入(将输出流写入到网页中的能力):
write() writeln() (自动带一个换行符)
open() close() 打开和关闭网页的输出流,
如果是在页面加载期间则不需要使用这两个方法
~~~
**实践:**
![](https://box.kancloud.cn/304044596ed3891daa6bf8d50e9192e7_628x138.png)
* * * * *
### `Element` 类型
> 用于标识`html`元素,提供了对元素标签名、子节点、及特性的访问
所有`html`元素的直接类型都是`HTMLElement`(区别于`XML`)
~~~
元素的标准属性,可以直接用点号取出,如 :
class,title, name, id,
className(有保留字的要做处理,class-->className )
~~~
![](https://box.kancloud.cn/89bd395dc332e60098321507b23137e8_607x199.png)
![](https://box.kancloud.cn/950d9036ad18a571c10b0bd651719a36_598x118.png)
> 还有一些自定义的属性,只能用 `getAttribute() , setAttribute() , removeAttribute()` 来操作,自定义属性在非严格模式下如果用点号操作,不会报错,但是不起作用;严格模式下,报错
![](https://box.kancloud.cn/e1023924e29f32b87d9b9dab8c6a6d53_486x61.png)
~~~
创建元素实例
var div=document.createElement('div');
// 书上看到说是可以通过字符串来创建完整的元素,经试验,不行!
div.name .className......
添加其他属性就用 setAttribute()
~~~
* * * * *
### `Text` 类型
~~~
var text=document.createTextNode('wdd')
div.appendChild(text) 给元素添加文本节点
~~~
* * * * *
### `DocumentFragment` 类型
~~~
document.createDocumentFragment();
相当于生成了一个 temp,把对DOM要做的操作,先预处理在这个片段上,
然后一次性操作,性能更好。
~~~
* * * * *