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的操作