2017-09-09更新
DOM
文档对象模型 (DOM) 是HTML和XML文档的编程接口。它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的结构,样式和内容。DOM 将文档解析为一个由节点和对象(包含属性和方法的对象)组成的结构集合。简言之,它会将web页面和脚本或程序语言连接起来。
DOM重要数据类型
Document对象
继承自Node和EventTarget
继承自HTMLDocument接口
参见Document
对象 | 说明 |
---|---|
document |
当一个成员返回document 对象(例如,元素的ownerDocument 属性返回,它所属于document ) ,这个对象就是document 对象本身。 |
element |
element 是指由 DOM API 中成员返回的类型为element 的一个元素或节点。 例如,document.createElement() 方法会返回一个node 的对象引用,也就是说这个方法返回了在DOM中创建的 element 。element 对象实现了DOM Element接口以及更基本的Node接口。 |
nodeList |
nodeList 是一个元素的数组,如从document.getElementsByTagName() 方法返回的就是这种类型。 nodeList中的条目由通过下标有两种方式进行访问:list.item(1) ,list[1] ,两种方式是等价的,第一种方式中item() 是nodeList 对象中的单独方法。 后面的方式则使用了经典的数组语法来获取列表中的第二个条目。 |
attribute |
当attribute 通过成员函数 (例如,通过createAttribute() 方法) 返回时,它是一个为属性暴露出专门接口的对象引用。DOM中的属性也是节点,就像元素一样,只不过您可能会很少使用它。 |
namedNodeMap |
namedNodeMap 和数组类似,但是条目是由name或index访问的,虽然后一种方式仅仅是为了枚举方便,因为在 list 中本来就没有特定的顺序。 出于这个目的,namedNodeMap 有一个item() 方法,你也可以从namedNodeMap 添加或移除条目。 |
window
对象表示浏览器中的内容
DOM创建
DOM节点(Node)通常对应于一个标签,一个文本,或者一个HTML属性。DOM节点有一个nodeType属性用来表示当前元素的类型,它是一个整数:
- Element,元素
- Attribute,属性
- Text,文本
DOM节点创建最常用的便是document.createElement
和document.createTextNode
方法:
1 | var el1 = document.createElement('div'); |
DOM查询
元素查询的API返回的的结果是DOM节点或者DOM节点的列表。
document提供了两种Query方法。1
2
3
4
5
6
7
8
9// 返回当前文档中第一个类名为 "myclass" 的元素
var el = document.querySelector(".myclass");
// 返回一个文档中所有的class为"note"或者 "alert"的div元素
var els = document.querySelectorAll("div.note, div.alert");
// 获取元素
var el = document.getElementById('xxx');
var els = document.getElementsByClassName('highlight');
var els = document.getElementsByTagName('td');
Element也提供了很多相对于元素的DOM导航方法:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18// 获取父元素、父节点
var parent = ele.parentElement;
var parent = ele.parentNode;
// 获取子节点,子节点可以是任何一种节点,可以通过nodeType来判断
var nodes = ele.children;
// 查询子元素
var els = ele.getElementsByTagName('td');
var els = ele.getElementsByClassName('highlight');
// 当前元素的第一个/最后一个子元素节点
var el = ele.firstElementChild;
var el = ele.lastElementChild;
// 下一个/上一个兄弟元素节点
var el = ele.nextElementSibling;
var el = ele.previousElementSibling;
DOM更改
1 | // 添加、删除子元素 |
属性操作
1 | // 获取一个{name, value}的数组 |
Node.innerText
Node.innerText 是一个表示一个节点及其后代的“渲染”文本内容的属性。
作为一个获取器,如果用光标突出显示元素的内容,然后将其复制到剪贴板,则它将近似于用户将获得的文本。此功能最初由Internet Explorer引入,并在所有主要浏览器供应商采用后于2016年在HTML标准中正式规定。
Node.textContent
是一个有点类似的替代方案,虽然两者之间有重要的区别。
element.innerHTML
Element.innerHTML
属性设置或获取描述元素后代的HTML语句。
Note: 如果一个<div>
,<span>
, 或 <noembed>
节点具有一个文本子节点,包含字符(&)
,(<)
, 或(>)
, innerHTML
将这些字符分别返回为&amp;
, &lt;
和&gt;
。使用Node.textContent
获取一个这些文本节点内容的正确副本。