Js DOM
🍹 DOM,即文档对象模型,是一个编程接口,允许通过JavaScript访问和操作HTML和XML文档的结构、样式以及内容。
1 DOM概述
- Dom概述
- 网页被加载时浏览器会创建页面的文档对象模型,即Document Object Model(DOM)。
- 通过这个对象模型,JavaScript获得创建动态HTML的所有力量。
- JavaScript能改变页面中的所有HTML元素、HTML属性,以及CSS样式。
- JavaScript能删除已有的HTML元素和属性,也能添加新的HTML元素和属性。
- JavaScript能对页面所有已有的HTML事件作出反应,能创建新的HTML事件。
- 因此,HTML DOM是获取、更改、添加或删除HTML元素的标准。
2 DOM节点
- DOM节点
- 节点Node,是构成网页的最基本组成部分,网页中的每个部分都可以称为一个节点。
- 例如:html标签、属性、文本、注释、整个文档等都是一个节点,但是具体类型不同。
- 常用节点
- 属性节点(Attribute)
- 元素属性,属性节点非元素节点的子节点而是其一部分,通过元素节点获取指定的属性节点。
- 例如:
元素节点.getAttributeNode("属性名")
,根据元素节点的属性名获取属性节点对象。
- 文档节点(Document)
- 文档节点代表整个HTML文档,网页中的所有节点都是其子节点。
- document对象作为window对象的属性存在,不用获取直接使用。
- 文本节点(Text)
- 指HTML标签以外的文本内容,任意非HTML的文本都是文本节点。
- 一般作为元素节点的子节点存在,先获取元素节点再获取文本节点。
- 例如:
元素节点.firstChild;
,获取元素节点的第一个子节点。
- 元素节点
- HTML文档中的HTML标签,最常用的节点,通过document方法获取。
- 例如:
document.getElementById()
,根据id属性获取元素节点对象。
- 属性节点(Attribute)
3 DOM操作
- DOM操作
- 文档对象代表网页,如果想要访问HTML页面中的任何元素,需要从访问document对象开始。
- document对象是一个全局对象,代表当前加载的HTML文档,可访问页面各个元素、属性等。
3-1 查找HTML元素
1 |
|
3-2 修改HMTL元素
- 修改HMTL元素
- document.createElement():创建HTML元素节点。
- document.createAttribute():创建HTML属性节点。
- document.createTextNode():创建HTML文本节点。
- 元素节点.removeChild(element):删除HTML元素。
- 元素节点.appendChild(element):添加HTML元素。
- 元素节点.replaceChild(element):替换HTML元素。
- 元素节点.insertBefore(element):在指定的子节点前插入新的子节点。
(1) 方法使用
1 |
|
(2) 动态操作
1 |
|
3-3 获取HTML的值
1 |
|
3-4 修改HTML的值
1 |
|
3-5 查找HTML父子
1 |
|
4 窗口事件
1 |
|
5 表单事件
1 |
|
6 键鼠事件
- 键鼠事件
- 当事件的响应函数被触发时,浏览器每次都会将一个事件对象作为实参传递给响应函数。
- Event对象代表事件状态,比如:事件在其中发生的元素、键盘按键的状态、鼠标位置等。
- 键鼠属性
- altKey:当事件被触发时,ALT键是否被按下。
- ctrlKey:当事件被触发时,CTRL键是否被按下。
- shiftKey:当事件被触发时,SHIFT键是否被按下。
- screenX:当事件被触发时,鼠标指针相对于用户屏幕的水平坐标。
- screenY:当事件被触发时,鼠标指针相对于用户屏幕的垂直坐标。
- clientX:当事件被触发时,鼠标指针相对于浏览器窗口的水平坐标。
- clientY:当事件被触发时,鼠标指针相对于浏览器窗口的垂直坐标。
1 |
|
6-1 键盘属性
- 键盘属性
- onkeyup:松开按键时运行脚本。
- onkeydown:按下按键时运行脚本。
- onkeypress:按下并松开按键时运行脚本。
1 |
|
6-2 鼠标属性
- 鼠标属性
- onclick:单击鼠标时运行脚本。
- ondblclick:双击鼠标时运行脚本。
- onscroll:滚动元素滚动条时运行脚本。
- onmouseup:松开鼠标按钮时运行脚本。
- onmousedown:按下鼠标按钮时运行脚本。
- onmousemove:鼠标指针移动时运行脚本。
- onmousewheel:转动鼠标滚轮时运行脚本。
- onmouseleave:鼠标指针移出元素时运行脚本,可以阻止冒泡。
- onmouseout:鼠标指针移出元素时运行脚本,不可以阻止冒泡。
- onmouseenter:鼠标指针移至元素之上时运行脚本,可以阻止冒泡。
- onmouseover:鼠标指针移至元素之上时运行脚本,不可以阻止冒泡。
1 |
|
7 媒体事件
- 媒体事件
- 通过视频(videos)、图像(images)、音频(audio)触发事件。
- 媒体属性
- onabort:发生中止事件时运行脚本。
- onpause:媒介数据暂停时运行脚本。
- onended:媒介抵达结尾时运行脚本。
- onloadeddata:加载媒介数据时运行脚本。
- onplay:媒介数据将要开始播放时运行脚本。
- onplaying:媒介数据已开始播放时运行脚本。
- onerror:元素加载期间发生错误时运行脚本。
- ondurationchange:媒介长度改变时运行脚本。
- onprogress:浏览器正在取媒介数据时运行脚本。
- ontimeupdate:媒介改变其播放位置时运行脚本。
- onloadstart:浏览器开始加载媒介数据时运行脚本。
- onratechange:媒介数据的播放速率改变时运行脚本。
- onwaiting:媒介已停止播放但打算继续播放时运行脚本。
- onstalled:取回媒介数据过程中(延迟)存在错误时运行脚本。
- onreadystatechange:就绪状态(ready-state)改变时运行脚本。
- onseeking:媒介元素的定位属性为真,且定位已开始时运行脚本。
- oncanplay:媒介能开始播放,但可能因缓冲而需要停止时运行脚本。
- onseeked:媒介元素的定位属性不再为真,且定位已结束时运行脚本。
- onvolumechange:媒介改变音量亦或当音量被设置为静音时运行脚本。
- oncanplaythrough:媒介无需因缓冲而停止即可播放至结尾时运行脚本。
- onloadedmetadata:媒介元素的持续时间及其它媒介数据已加载时运行脚本。
- onemptied:媒介资源元素突然为空时(例如网络错误、加载错误等)运行脚本。
- onsuspend:浏览器正在取媒介数据但在取回整个媒介文件前停止时运行脚本。
1 |
|
8 其他事件
1 |
|
9 事件处理
- 事件处理
- 事件冒泡、事件委派等主要涉及如何捕获和处理用户与网页交互时所产生的事件。
- 这些概念是前端开发中处理用户交互的重要组成部分,有利于管理事件及其响应。
9-1 事件冒泡
- 事件冒泡
- 事件的向上传导,后代元素的事件被触发时,其祖先元素的相同事件也会被触发。
- 开发中大部分情况冒泡都是有用的,若不希望发生事件冒泡可通过事件对象取消。
1 |
|
9-2 事件委派
- 事件委派
- 只绑定一次事件,就可应用到多个元素上,即使元素是后续添加的。
- 可以尝试将事件绑定给元素的共同祖先元素上,也就是事件的委派。
- 当后代元素的事件触发时,会冒泡到祖先元素,从而通过响应函数处理事件。
- 事件委派利用了事件冒泡,通过委派可以减少事件绑定的次数,并提高性能。
1 |
|
9-3 事件绑定
1 |
|
9-4 事件传播
- 事件传播
- 微软:事件由内向外传播,事件触发时,先触发当前元素上的事件,然后向祖先元素传播。
- 网景:事件由外向内传播,事件触发时,先触发当前元素的最外层祖先元素,再向内传播。
- W3C综合
- 捕获阶段:先从最外层的祖先元素向目标元素进行事件捕获,默认不触发。
- 目标阶段:事件捕获到目标元素,捕获结束后开始在目标元素上触发事件。
- 冒泡阶段:事件从目标元素向祖先元素传递,依次触发祖先元素上的事件。
- 如果希望捕获阶段就触发事件,可将
addEventListener()
的第三个参数设置为true。 - IE8及以下浏览器中没有捕获阶段,可使用
event.stopPropagation();
取消事件传播。
Js DOM
https://stitch-top.github.io/2024/08/23/web/web01-javascript/javascript04-js-dom/