JavaScript中的DOM及相关操作

一、什么是DOM

  JavaScript由ECMAScript、DOM和BOM三局地组成,其中DOM代表描述网页内容的艺术和接口,即文档对象模型(Document
Object
Model)。在网页上,社团页面(或文档)的对象被协会在一个树形结构中,用来代表文档中目标的正规模型就叫做DOM,而树形结构就是我们常说的DOM树。

  维基百科中介绍DOM更为可靠:DOM是一种跨平台和言语非倚重性的应用程序编程接口,即拍卖现在的HTML,XHTML或XML文档作为树结构,其中逐个节点是一个目的,逐个节点表示该文档的一局地。

二、DOM节点

1.节点的系列

  DOM树是由许多两样类其他节点组成的,而那几个节点类型都有一个nodeType值,我们可以透过nodeType值来判断大家赢得的或想要的是或不是对应类型的节点。

节点类型 元素节点(标签节点) 属性节点 文本节点(空格、换行、文字) 注释节点 document节点
nodeType值 1 2 3 8 9

  除了通过nodeType值判断项目以外大家仍是可以通过nodeName来查阅成分节点和质量节点的节点名称,还有使用nadeValue来查看属性节点的属性值。

 

2.获得成分节点

document.getElementById(id);
document.getElementByTagName(tagname);
document.getElementByClassName(classname);

  常常想要在JavaScript中改变或使用HML中的成分节点时,都要先拿走才方可调用,那么大家不怕通过设置元素的Id属性或Class属性来得到,或是使用标签名取得。不过要小心的是getElementById()方法不可以干活在XML中,在XML文档中,必须通过拥有id属性来拓展搜寻,而此类型必须在
XML DTD 中展开宣示。

  获取完大家想要的节点后,大家还足以由此节点的涉及来操作其余节点,那里我们以div成分为初设元素节点来比喻。

  2.1 子节点

div.children();
div.childNodes();

 

  获取div上面的子节点,而div.children()只可以获得到是因素节点的子节点,而div.childNodes()会得到具有项目标子节点,也就是说会分析空白文本节点。

  2.2 父节点

div.parentNode();
div.offsetParent();

 

  获取div的父节点,div.offsetParent()获取的是怀有定位属性的祖辈节点,即从父节点先导查找,即使父节点没有定点属性,那么再找父节点的父节点,直到找到有稳定属性的节点。

  2.3
兄弟节点

//下一个兄弟节点 
div.nextElementSibling();
div.nextSibling();
//上一个兄弟节点 
div.previousElementSibling();
div.previousSibling();

 

  那里有没有Element很重点,跟获取子节点一样,div.nextSibling()和div.previousSibling()会分析空白节点,会博得到div下边的空格或回车。

  2.4
首尾子节点

//获取div的第一个子节点
div.firstElementChild();
div.firstChild();
//获取div的最后一个子节点
div.lastElementChild();
div.lastElementChild();

 

  不一样同上。

 

3.节点操作

  大家除了可以在HTML中拉长、删除个修改节点,也得以在JavaScript中对节点开展操作。

  3.1
创造节点

//创建节点/创建文本节点
createElement();
createTextNode();

 

  成立文本节点一般用来向元素节点中添加内容,它创制的是静态文本,不可以像innerHTML一样带有HTML格式,所以creatTextNode()更安全,而innerText又有浏览器包容难题。

  3.2 添加节点

  大家创立的节点不会活动添加到HTML里,需求大家对创造的节点开展操作。

//向尾部添加子节点 
appendChild(); 
//向目标节点之前添加
insertBefore(newElement,targetElement); 

  insertBefore()第四个参数是可选参数,如若不写第三个参数那么就默许向底部添加,即一律appendChild();

  3.3 替换

//将旧节点换为新节点
replaceChild(newElement,oldElement);

  div.replaceChild(newElement,oldElement)
,那里无论是新节点照旧旧节点,都必须是div的子节点。

  3.4 删除

removeChild();

  注意删除的是子节点。

  3.5 克隆/复制

//深复制或浅复制
cloneNode(boolean);

  当参数的布尔值为true时为深复制,即会复制节点本人以及它以下的所有子节点。

  当参数的布尔值为false时为浅复制,只会复制节点自个儿我。

  3.6 判断

hasChildNode();

  判断是还是不是有子节点,再次回到布尔值。

ECMAScript,  3.7 属性

//获取节点属性
getAttribute();
//设置节点属性
setAttribute();
//删除节点属性
removeAttribute();

  要注意的一些就是class属性无法由此setAttribute();
设置。

三、DOM的利害

 

  DOM的长处紧要显示在:易用性强,并且遍历容易,帮忙XPath,增强了易用性。

 

  DOM的败笔紧要展现在:效用低,解析速度慢,内存占用量过高。