 文档对象模型
文档对象模型
  # DOM
DOM 是一项 W3C (World Wide Web Consortium) 标准,HTML DOM 是 HTML 的标准对象模型和编程接口。
HTML DOM
- 作为对象的 HTML 元素
- 所有 HTML 元素的属性
- 访问所有 HTML 元素的方法
- 所有 HTML 元素的事件
# DOM 导航节点树
 
 - DOM 根节点 - document.body - 文档的 body
- document.documentElement - html
 
- 节点导航 - 属性 - 描述 - 属性 - 描述 - parentNode - 父节点 - childNodes[nodenumber] - 子节点 - firstChild - 第一个子节点 - lastChild - 最后一个子节点 - nextSibling - 下一个兄弟节点 - previousSibling - 前一个兄弟节点 
- nodeName - 规定节点的名称 - 元素节点的 nodeName 等同于标签名
- 属性节点的 nodeName 是属性名称
- 文本节点的 nodeName 总是 #text
- 文档节点的 nodeName 总是 #document
 
- nodeValue - 节点的值 - 元素节点的 nodeValue 是 undefined
- 文本节点的 nodeValue 是文本文本
- 属性节点的 nodeValue 是属性值
 
- nodeType - 节点的类型 - 类型 - 节点 - 类型 - 节点 - 类型 - 节点 - 类型 - 节点 - 类型 - 节点 - 元素 - 1 - 属性 - 2 - 文本 - 3 - 注释 - 8 - 文档 - 9 
# 获取元素节点
| 方法 | 描述 | 
|---|---|
| document.getElementById(id) | 通过 id 来查找 | 
| document.getElementsByClassName(class) | 通过类名来查找 | 
| document.getElementsByName(name) | 通过 name 属性来查找 | 
| document.getElementsByTagName(tagName) | 通过标签名来查找 | 
| document.querySelector() | 查找符合规则的第一个元素 | 
| document.querySelectorAll() | 查找符合规则的所有元素 | 
查找元素与节点
- 查父元素
- 当前元素.parentElement 父节点
- 当前元素.parentNode 父元素 符合 W3C 标准
 
- 查子元素
- 当前元素.children 子元素
- 当前元素.childNodes 子节点 符合 W3C 标准
 
- 同级元素
- 上一个元素
- 当前元素.previousElementSibling 元素
- 当前元素.previousSibling 节点
 
- 下一个元素
- 当前元素.nextElementSibling 元素
- 当前元素.nextSibling 节点
 
 
- 上一个元素
元素和节点的区别
元素是节点的一种类型,它表示 DOM 树中的单个节点。而节点不仅可以是元素,还可以是注释、文档、文本节点等。
# 新增元素
| 方法 | 描述 | 
|---|---|
| document.createElement(element) | 创建 HTML 元素 | 
| document.createTextNode(文本) | 创建文本节点 | 
| element.appendChild(新元素) | 后添加 | 
| element.insertBefore(新元素,子元素) | 前添加 | 
| document.write(text) | 写入 HTML 输出流 | 
# 删除元素
| 方法 | 描述 | 
|---|---|
| document.removeChild(element) | 删除 document 下的元素 | 
| element.remove() | 删除该元素自身 旧浏览器中不起作用 | 
# 替换元素
| 方法 | 描述 | 
|---|---|
| document.replaceChild(element) | 替换元素 | 
# 克隆元素
| 方法 | 描述 | 参数 | 
|---|---|---|
| element.cloneNode() | 克隆元素 | true 会克隆标签间一切内容 false 时只会克隆标签及标签上的属性,标签内容不会克隆 | 
# 元素属性
- 标准属性
- 元素.属性名
 
- 自定义属性
- getAttribute(property) 获取
- setAttribute(property,value) 设置
- removeAttribute(property) 移出
- element.dataset 自定义属性值
 
# 事件
| 事件 | 描述 | 事件 | 描述 | 
|---|---|---|---|
| click | 点击 | dblclick | 双击 | 
| blur | 失去焦点 | focus | 获取焦点 | 
| mouseover | 鼠标移入 | mousemove | 鼠标移动 | 
| mouseout | 鼠标移出 | mousedown | 鼠标按下 | 
| mouseup | 鼠标松开 | keydown | 键盘按下 | 
| keypress | 键盘按下或按住 | keyup | 键盘松开 | 
| change | 改变域的内容 | load | 页面和图像被完成加载 | 
| error | 加载文档或图像时发生错误 | abort | 图像视频加载中被中断 | 
| unload | 退出页面 | resize | 窗口变化 | 
| select | 文本被选定 | reset | 重置按钮被点击 | 
| submit | 提交按钮被点击 | ... | ... | 
# 事件绑定
- 赋值语句绑定element.onEvent = function(){} // 传递参数 <button onclick="clickValue(2)">点击</button> function clickValue(value){}1
 2
 3
 4
- 事件监听函数// useCapture 指定使用事件冒泡还是事件捕获 // 默认值是 false,将使用冒泡传播。 true,则事件使用捕获传播。 element.addEventListener(event,function,useCapture)1
 2
 3- 冒泡
最内侧元素的事件会首先被处理,然后是更外侧的 
- 捕获
最外侧元素的事件会首先被处理,然后是更内侧的 
 
- 冒泡
- 调用附加事件// 主流浏览器都不支持 element.attachEvent(onEvent, function () {});1
 2
# 事件解绑
- 赋值方式解绑element.onEvent = null;1
- 事件监听函数element.removeEventListener(onEvent,function)1
- 附加事件解绑element.detachEvent(onEvent,function)1
# 事件冒泡
当子元素接收到事件的时候,会把事件传递给自己的父组件,一直到 window
- 阻止事件冒泡
- ev.stopPropagation()
- ev.cancelBubble = true
 
# 定时事件
JavaScript 可以在时间间隔内执行。称为
定时事件( Timing Events)
// 等待指定的毫秒数后执行函数
setTimeout(function, milliseconds)
// 在指定的毫秒间隔中持续重复执行该函数
setInterval(function, milliseconds)
// 清除定时器
clearTimeout(timeoutVariable)
clearInterval(timerVariable)
1
2
3
4
5
6
7
2
3
4
5
6
7
上次更新: 2025/02/08, 22:43:24
 
 