这是我参与「第四届青训营 」笔记创作活动的第3天
DOM API
-
名词解释:
- 文档:整个页面的html
- 元素:所有标签都称为元素(如
p
、a
) - 节点:DOM树上的所有内容都可以称为节点(包括标签、属性、文本、注释等)
事件
-
事件三要素:事件源、事件类型、事件处理程序
-
事件源:通过
获取并选择元素
获取被触发的元素 -
事件类型:表示被触发的方式
- 常用鼠标事件
事件 | 触发条件 |
---|---|
click | 鼠标左键点击 |
mouseover | 鼠标经过(冒泡) |
mouseenter | 鼠标经过(不冒泡) |
mouseout | 鼠标离开(冒泡) |
mouseleave | 鼠标离开(不冒泡) |
focus | 得到焦点 |
blur | 失去焦点 |
mousemove | 鼠标移动 |
mouseup | 鼠标弹起 |
mousedown | 鼠标按下 |
selectstart | 鼠标开始选择文字 |
- 常用键盘事件
事件 | 触发条件 |
---|---|
keyup | 某个键被弹起 |
keydown | 某个键被按下(执行顺序在press之前) |
keypress | 按下触发,但不识别功能键功能键(ctrl, shift, 箭头等) |
- 事件处理程序:注册事件并添加事件处理程序的方法
注册事件
-
old fashioned
btn.onclick = function() { alert('clicked'); }
- 特点:注册事件唯一,最后一个会覆盖前面的
-
recommend
btn.addEvenListener('click',function{ alert('clicked'); })
- 特点:可以添加多个监听器,会轮流执行所有处理函数
-
可以添加第三个参数,其值默认为false,表示采取冒泡模式;也可传入true,表示采取捕获模式
删除事件
-
对应第一种注册方式
btn.onclick = null;
-
对应第二种注册方式(要求不能使用匿名函数注册)
function solve(){ ... } btn.addEventListener('click',solve);//注册 btn.removeEventListener('click',solve);//删除
事件流
- 捕获阶段:从document元素开始向下找事件源
- 冒泡阶段:从事件源向上到document
- 在冒泡或捕获过程中路径上被注册的相同事件都会执行
- 部分事件不会冒泡,如
onblur
,onfocus
,onmouseenter
,onmouseleave
事件对象
btn.addEventListener('click',function(event){})
-
事件对象:侦听函数形式上的形参event
-
注意:
- 事件对象并非传入的参数,而是系统自动创建的一个对象
- 事件对象event包含了事件相关的一系列数据
常用属性
属性名 | 说明 |
---|---|
event.target | 返回触发事件的对象(元素) |
event.type | 返回事件类型(如click,mouseover等) |
event.preventDefault() | 阻止默认行为 |
event.preventPropogation() | 阻止冒泡 |
-
注意:
-
区分
event.target
和this
,前者返回触发事件的对象,后者返回绑定事件的对象- 例如:对点击事件,this总是返回绑定事件的对象,而
event.target
返回的是被点击的对象
- 例如:对点击事件,this总是返回绑定事件的对象,而
-
鼠标事件对象
-
获取坐标:(坐标以左上角为零点)
属性名 说明 event.clientX/Y 鼠标相对于浏览器可视区域的XY坐标 event.pageX/Y 鼠标相对于文档的XY坐标 event.screenX/Y 鼠标相对于电脑屏幕的XY坐标
键盘事件对象
-
获取按下的键盘内容
属性名 说明 event.keycode 获取键盘输入的ASCII码值(keyup,keydown事件不去分大小写,keypress区分)
事件委托
- 原理:将一个父节点下子元素注册事件修改为直接给父元素注册事件,通过冒泡达到相同目的
- 优点:减少对DOM的操作,提高效率
DOM操作
获取并选择元素
-
document.querySelector('arg')
:- arg1为一个css形式的选择器
- 会选择选择html文档中第一个满足该选择器的元素
-
document.querySelectorAll('arg')
- 会返回一个包含所有满足
arg
选择器的元素的数组
- 会返回一个包含所有满足
-
获取body对象:
document.body
-
获取html对象:
document.documentElement
-
节点获取(根据相对位置):
node.parentNode
父节点node.childNodes
所有的子节点(包括元素、文本、样式)node.children
所有的元素节点
修改内容
-
常用DOM对象成员(均可读写):
-
element.innerText
:表示element
内的内容(不识别HTML标签,若更换的内容包含HTML标签,会直接显示标签) -
element.innerHTML
: 更改element
内的内容,识别HTML标签- 读取时会去掉换行和空格
-
element.value
: 表单内的文字内容(如输入框)
-
插入节点
- 创建节点:
document.createElement('tagname')
- 添加节点(通过父节点):
node.appendChild(child)
删除
- 删除孩子:
removeChild(child)
自定义属性操作
setAttribute()
getAttribute()
removeAttribute()