# DOM (文档对象模型)
DOM 是 Document Object Model 的缩写, 定义了访问和操作 HTML 和 XML 文档的标准方法, 是 W3C 标准之一。
DOM 包括以下三个部分:
- 核心 DOM
- XML DOM
- HTML DOM
# HTML DOM
HTML DOM 是:
- HTML 的标准对象模型
- HTML 的标准编程模型
- W3C 标准
HTML DOM 定义了所有 HTML 元素的对象和属性,以及访问它们的方法。
换言之,HTML DOM 是关于如何获取、修改、添加或删除 HTML 元素的标准。
HMTL DOM 将整个 HTML 文档中的所有内容都视为节点
# 节点
根据 W3C 的 HTML DOM 标准, HTML 文档中的所有内容都是节点:
- 这个文档是一个文档节点
- 每个 HTML 元素都是元素节点
- HTML 元素内的文本是文本节点
- 每个 HTML 属性是属性节点
- 注释是注释节点
节点的关系
父节点 parent 子节点 child 同胞节点 sibling
节点是一个对象, 编程接口是对象的方法和属性
# 常用方法
- 获取节点
- var app = document.getElementById('app')
- getElementsByTagName
- getElementsByClassName
- 创建节点
- createElement
- createTextNode
- createAttribute
- 删除节点
- removeChild(node)
- 复制节点
- cloneNode
- 添加节点
- appendChild(node)
- insertBefore
- 替换节点
- replaceChild
- hasChildNodes
- getRootNode
- isEqualNode
- isSameNode
# 常用属性
- parentNode: 父节点
- parentElement: 父元素
- childElementCount: 子元素数量
- firstChild: 第一个子节点
- lastChild: 最后一个子节点
- firstElementChild: 第一个子元素
- lastElementChild: 最后一个子元素
- childNodes: 子节点
- children: 子元素
- previousSibling: 前一个节点
- nextSibling: 后一个节点
- previousElementSibling: 前一个元素
- nextElementSibling: 后一个元素
# 属性
获取属性
- innerHTML
- attributes
- getAttribute
修改属性
- setAttribute
# 节点相关属性
- | nodeType | nodeName | nodeValue |
---|---|---|---|
元素节点 | 1 | 同标签名 | undefined或null |
属性节点 | 2 | 同属性名 | 同属性值 |
文本节点 | 3 | #text | 同文本本身 |
注释节点 | 8 | - | - |
文档节点 | 9 | #document | - |
class
- 获取类名
- className
- 添加类名
- classList.add
- 删除类名
- classList.remove
修改 HTML (元素、属性、样式、事件)
- 改变 HTML 内容
- 改变 CSS 样式
- 改变 HTML 属性
- 创建新的 HTML 元素
- 删除已有的 HTML 元素
- 改变事件
// 使用 innerHTML
var p = document.getElementById('p');
p.innerHTML = '修改文本'
// 修改样式
p.style.color = 'red'
// 创建新的 HTML 元素
var span = document.createElement('span')
var text = document.createTextElement('文本节点')
span.appendChild(text)
p.appendChild(span)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 事件
- 点击鼠标
- 页面加载
- 图片加载
- 鼠标移入
- 输入字段
- 表单提交
- 触发按键
<body onload="checkCookies()">
<input type="text" id="fname" onchange="upperCase()" />
</body>
<script>
var button = document.getElementById('button')
button.onclick = function(){}
</script>
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
onmouseover
onmouseout: 子元素也会触发
onmousedown
onmouseup
onmouseleave
onmouseenter
onmousemove
onmousewheel
document.documenElement
document.head
document.body
document.title
document.forms
document.links
document.images
document.all
document.write
# 常见问题
- node 和 element 的区别
node 包括所有节点, element 只表示 HTML 元素节点