dom

130 阅读3分钟

Nodelist

Nodelist是一组类数组对象,Nodelist是基于DOM结构执行查询的结果,Nodelist是有生命、有呼吸的对象,而不是某一瞬间我们拍下来的快照。

Node之间的关系(指针)

parentNode、ChildNodes、previousSibling、nextSibling、firstChild、lastChid

每个node都会有一个ownerDocument属性,指向整个文档的文档节点document

方法hasChildNodes可以检测节点是否含有子节点

DOM操作方法

appendChild向目标节点的末尾添加一个节点,相应的childNodes的列表、length都随之更新

inserteBofore把节点插入到指定位置上,这个方法接受两个参数:要插入节点、参照节点。插入节点后,被插入的节点会变成参照节点的previousSibling同胞节点。同时被插入节点会被返回。inserteBefore(node, null) 与 appendChild(node)执行相同的操作

replaceChild接受两个参数:要插入的节点、被替换的节点

removeChild接受一个参数:要删除的节点

以上四个方法操作的都是某个节点的子节点,所以首先要先取得父节点,并不是所有的节点都有子节点,如果再不支持子节点的节点上调用了以上的方法则会报错

有两个方法所有的节点都拥有

第一个:cloneNode。用于创建与这个节点完全相同的的副本节点,该方法接收一个参数布尔值,表示是否执行深复制:在参数为true的时候执行深复制,即复制节点以及他的整个节点树;在参数为false的时候执行浅复制,即只复制该节点本身。

注:cloneNode()不会复制添加到Dom节点中的JavaScript属性,如事件处理程序

第二个:normalize。该方法的唯一作用就是处理文档树种的文本节点。当在某个节点上调用该方法,就会在该节点的后代中节点中:1、删除空文本节点2、合并两个相邻的文本节点

文档节点

title属性,获取文档标题

URL、domain、referrer这三个属性只有domain是可以设置的,但设置也并非随意设置,如果URL中包含有子域名p2p.wroxy.com,那么可以设置文档的domain为wroxy.com

查找元素

getElementById、getElementsByTagName、getElementsByName

在HTML中使用getElementsByTagName和getElementsByName会返回一个HTMLCollection,一个动态集合,该对象与NodeList非常类似

特殊集合

document.forms,文档中所有的form元素,与getElemensByTagName('form')得到的结果相同

doucments.images,文档中所有的img元素,与getElementsByTagName('img')得到的结果相同

Element

1、html元素的标准特性

id、title、className、lang、dir

2、获取元素特性

每个元素都会有一个或者多个特性,这些特性的用途是给出相应元素的或其内容的附加值。

操作特性的DOM方法主要由三个:getAttribute()、setAttribute()、removeAttribute()

这三个方法可以操作自定义属性,HTMLElement中有5个标准属性的方法

3、attributes

Element是使用attributes属性的唯一节点,得到的同样是一个动态属性集合

4、创建元素

document.createElement()方法可以创建一个元素,该方法只接收一个参数,即要创建的元素的标签名

5、元素的子节点

childNodes,得到的集合会可能会包含文本节点、注视节点或者是处理指令,nodeType===1时表示元素节点

Text类型

1、创建文本节点

createTextNode(),这个函数只接收一个参数,即要创建的文本内容

理解DOM的关键就是理解DOM对性能的影响。DOM操作往往是JavaScript中开销最大的部分,而访问NodeList导致的问题最多。NodeList是“动态”的,这意味着每一次访问NodeList就会进行一次查询,因而需要减少DOM的操作