2019-03-06 DOM对象
DOM对象概述
DOM(Document Object Model)对象即文档对象模型,是html和xml的编程接口,
DOM对象由核心 DOM,HTML DOM,XML DOM三部分组成, 其中我们主要接触的是
HTML DOM, HTML DOM定义了访问和操作html文档的标准编程接口和方法。
DOM 以树结构表达 HTML 文档,如下图:
imageHTML DOM 节点
在html中一切内容都是节点
-
整个文档是文档节点
-
每个HTML元素是元素节点
-
HTML元素内的文本是文本节点
-
属性有属性节点
-
注释有注释节点
这些节点共同组成了节点树:
image节点之间的关系
DOM节点之间的关系和我们人类也很相似,毕竟是我们人类发明规范的,也有父子,兄弟的关系。
如图:
image从图中可以看出:
-
在DOM树中有一个根节点,也就是html节点
-
html有多个子(child)节点,每个子节点又有自己的父(parent)节点和子节点
-
在同一个父节点下的节点互为兄弟(sibling)节点
HTML DOM 方法
-
获取元素的方法
- 通过ID获取元素 getElementById();
var id = document.getElementById('id名');
- 通过元素名称获取元素,获取的是该元素的元素列表
var lis = document.getElementsByTagName('元素名称');
- 通过类名称获取元素,获取的是名称为该类名的元素列表(有兼容问题,ie8即以下不支持)
var lis = document.getElementsByClassName('元素名称');
-
html5新增元素选择器querySelector()和 querySelectorAll();(有兼容问题,ie8即以下不支持)
var id = document.querySelector('#id'); //获取id元素,id名称前需加#
var calssName = document.querySelector('.calssName'); //获取类元素,类名前需加.
querySelector()和 querySelectorAll()的区别
-
querySelector() 获取的是单个元素,querySelectorAll()获取的是元素列表(多个元素)
-
用法相同
var calssNames = document.querySelectorAll('.calssName'); //获取类元素,类名前需加.
-
-
操作元素的方法
-
属性方法innerHTML和innerText
-
innerHTML获取HTML内容(包括html标签)
-
innerText 获取文本内容(不包括html标签)
如下例所示:
<p>hello word</p>
var p = docuement.querySelector('p'); console.log(p.innerHTML); // <p>hello word</p> console.log(p.innerText); //hello word
-
也可以用innerHTML和innerText来修改内容
> p.innerHTML = "新文本!"; * 节点之间关系的访问与操作 * parentNode 获取某元素的父节点 * childNodes 获取某元素的子节点 * children获取某元素的子节点 * firstChild 获取某元素的第一个子节点 * lastChild 获取某元素的最后一个子节点 * previousSibling 获取某元素的上一个兄弟节点 * nextSibling 获取某元素的下一个兄弟节点 例子: ```html <ul> <li>第一个节点</li> <li class="child">第一个节点</li> <li>第一个节点</li> </ul> ``` ```javaScript var ul = document.querySelector('ul'); var childs = ul.childNodes; //获取该元素的子节点 var firstChild = ul.firstChild ; var lastChild = ul.lastChild ; var child = document.querySelector('child'); var parent = child.parentNode; var lastNode = child.nextSibling; var prevNode = child.previousSibling; ```
-
操作节点增,删,改
-
创建元素节点createElement和createTextNode(创建文本节点)
-
添加子节点appendChild()和insertBefore()在指定的子节点前面插入新的子节点
-
删除子节点 removeChild()
-
替换子节点 replaceChild()
实例:
<div id="div1" <p id="p1">这是一个段落。</p> <p id="p2">这是另一个段落。</p> </div>
var para=document.createElement("p"); var node=document.createTextNode("这是一个新段落。"); para.appendChild(node); var element=document.getElementById("div1"); element.appendChild(para); var child=document.getElementById("p1"); element.replaceChild(para,child); element.removeChild(child);
常用方法总结:
方法 | 描述
------------ | ------------
getElementById() | 返回带有指定 ID 的元素。
getElementsByTagName() | 返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)
getElementsByClassName() | 返回包含带有指定类名的所有元素的节点列表(集合/节点数组)
querySelector() | 返回选定的某个元素
querySelectorAll() | 返回选定的某个名称的所有元素的节点列表(集合/节点数组)
createElement() | 创建元素节点
createTextNode() | 创建文本节点
appendChild() | 把新的子节点添加到指定节点
insertBefore() | 在指定的子节点前面插入新的子节点
removeChild() | 删除子节点
replaceChild() | 替换子节点
节点类型:
节点 | 对应的nodeType属性值 | 对应的常量
--------- | --------- | ------
文档节点(document)| 9 | Node.DOCUMENT_NODE
元素节点(element)| 1 | Node.ELEMENT_NODE
属性节点(attr)| 2 | Node.ATTRIBUTE_NODE
文本节点(text)| 3 | Node.TEXT_NODE
文档片断节点(DocumentFragment)| 11 | Node.DOCUMENT_FRAGMENT_NODE
文档类型节点(DocumentType)| 10 | Node.DOCUMENT_TYPE_NODE
注释节点(Comment)| 8 | Node.COMMENT_NODE
节点关系:
节点属性 | 描述
----------------- | ---------------
parentNode | 获取某元素的父节点
childNodes | 获取某元素的子节点列表
children() | 获取某元素的子节点列表
firstChild | 获取某元素的第一个子节点
lastChild | 获取某元素的最后一个子节点
previousSibling | 获取某元素的上一个兄弟节点
nextSibling | 获取某元素的下一个兄弟节点
-
-