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();

  判断是否有子节点,返回布尔值。

  3.7 属性

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

  要留心的某些尽管是class属性不克经过setAttribute();
设置。

老三、DOM的得失

 

  DOM的长主要呈现于:易用性强,并且遍历简单,支持XPath,增强了易用性。

 

  DOM的毛病主要表现于:效率不如,解析速度放缓,内存占用量过强。