JavaScript
DOM
操作
HTML
DOM
(文档对象模型)
当网页被加载时,浏览器会创建页面的文档对象模型(
Document Object Model
)。
HTML
DOM
树
1 |
|
通过可编程的对象模型,
JavaScript
可以创建动态的HTML
。- 改变页面中
HTML
的元素 - 改变页面中
HTML
的属性 - 改变页面中
CSS
的样式 - 对页面中的事件做出反应
- 改变页面中
查找HTML
元素
- 通过
id
查找
1 | var x = document.getElementById("intro"); |
- 通过标签名查找
1 | var x = document.getElementById("main"); |
- 通过类名查找
1 | var x = document.getElementsByClassName("intro"); |
改变HTML
- 改变
HTML
输出流
1 | document.write(Date()); |
- 改变
HTML
内容
1 |
|
- 改变
HTML
属性
1 |
|
改变CSS
- 改变
HTML
样式
1 |
|
注意:
CSS
属性使用中划线(-
)分隔,在JS
中,需要换成驼峰式
写法。
- 使用事件
1 |
|
DOM
事件
- 对事件做出反应
在事件发生时执行
JavaScript
,可以完成一系列功能。
eg
:
当用户点击鼠标时;
当网页已加载时;
当图像已加载时;
当鼠标移动到元素上时;
当输入字段被改变时;
当提交HTML
表单时;
当用户触发按键时;
onload
和onunload
事件onload
和onunload
事件会在用户进入或离开页面时被触发onload
事件可用于检测访问者的浏览器类型和浏览器版本,并基于这些信息来加载网页的正确版本onload
和onunload
事件可用于处理cookie
onchange
事件
1 |
|
注意:点击回车或者离开输入框后事件触发。
另一种写法:
1 |
|
实现了同样的效果,但第二种写法在一开始就通过
this
获取了输入框的值以实参的方式传入方法。
onmouseover
和onmouseout
事件
1 |
|
onmousedown
、onmouseup
以及onclick
事件- 当点击鼠标按钮时,会触发
onmousedown
事件 - 当释放鼠标按钮时,会触发
onmouseup
事件 - 当完成鼠标点击时,会触发
onclick
事件
- 当点击鼠标按钮时,会触发
1 |
|
DOM
事件监听
addEventListener()
方法addEventListener()
方法用于向指定元素添加事件句柄addEventListener()
方法添加的事件句柄不会覆盖已存在的事件句柄- 可以向一个元素添加多个事件句柄
- 可以向同个元素添加多个同类型的事件句柄,如:两个
"click"
事件
语法:
1 | element.addEventListener(event, function, useCapture); |
第一个参数是事件的类型 (如 “click” 或 “mousedown”;
第二个参数是事件触发后调用的函数(只是函数名,不加括号;加括号是直接调用);
第三个参数是个布尔值用于描述事件是冒泡还是捕获。该参数是可选的。
1 |
|
- 传递参数
当传递参数值时,使用
"匿名函数"
调用带参数的函数
1 |
|
- 事件冒泡或事件捕获
事件传递有两种方式:冒泡与捕获。
事件传递定义了元素事件触发的顺序。 如果将 <p>
元素插入到 <div>
元素中,用户点击 <p>
元素, 哪个元素的 "click"
事件先被触发呢?
在 冒泡
中,内部元素
的事件会先
被触发,然后再触发外部元素,即: <p>
元素的点击事件先触发,然后会触发 <div>
元素的点击事件。
在 捕获
中,外部元素
的事件会先被触发,然后才会触发内部元素的事件,即: <div>
元素的点击事件先触发 ,然后再触发 <p>
元素的点击事件。
addEventListener()
方法可以指定 "useCapture"
参数来设置传递类型
默认值为 false
, 即冒泡传递
,当值为 true
时, 事件使用捕获传递
。
removeEventListener()
方法
1 | element.removeEventListener("click", clickHandle); |
DOM
元素
创建新的
HTML
元素 (节点)appendChild()
- 添加到元素尾部
1 |
|
创建新的
HTML
元素 (节点)insertBefore()
- 添加到开始位置
1 |
|
移除已存在的元素
removeChild()
1 |
|
已知要查找的子元素,然后查找其父元素,再删除这个子元素(删除节点必须知道父节点):
1 |
|
替换
HTML
元素replaceChild()
1 |
|