简单来说 事件冒泡 就是从深到浅 从最里层标签的事件开始到最外层标签的事件
而事件捕获则相反 是从最外层标签的事件开始到最里层标签的事件
<div id="outer">
<p id="inner">Click me!</p>
</div>
// 事件冒泡 p => div => body => html => document
// 事件捕获 document => html => body => div => p
DOM
DOM 是JavaScript 操作网页的接口, 全称为“文档对象模型”=> 将网页转为一个JavaScript 对象,从而可以用脚本进行各种操作。
节点 DOM 的最小组成单位 (构成网页的最基本的部分)
- Document:整个文档树的顶层节点(文档节点)
- DocumentType:doctype 标签(比如 < !DOCTYPE html > )
- Element:网页的各种HTML标签(比如 < body >、等)(元素节点)
- Attr:网页元素的属性(比如class='right')(属性节点)
- Text:标签之间或标签包含的文本(文本节点)
- Comment:注释
- DocumentFragment:文档的片段
浏览器提供一个原生的节点对象Node,上面的七种节点都继承了Node。有一些共同的属性和方法。
节点/属性 | nodeName | nodeType | nodeValue |
---|---|---|---|
文档节点 | #document | 9 | null |
元素节点 | 标签名 | 1 | null |
属性节点 | 属性名 | 2 | 属性值 |
文本节点 | #text | 3 | 文本内容 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button id="btn">我是一个按钮</button>
<script>
/**
浏览器已经为我们提供文档节点对象, 这个对象是window 属性
可以再页面中直接使用,文档节点代表的是整个网页
*/
//console.log(document)
//获取到button这个对象
var btn = document.getElementById("btn");
console.log(btn)
//修改按钮的文本
btn.innerHTML = "Button"
</script>
</body>
</html>
事件 就是文档或浏览器窗口中发生的一些特定的交互瞬间
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 我们可以再事件对应的属性中设置一些js代码,
这样当事件被触发时,这些代码将会执行
结构和行为耦合 不方便维护
-->
<!-- <button id="btn" ondblclick="alert('hello?')">我是一个按钮</button> -->
<button id="btn" >我是一个按钮</button>
<script>
/**
* 事件,就是用户和浏览器之间的交互行为
* 比如:点击按钮,鼠标移动,关闭窗口
*/
//获取按钮对象
var btn = document.getElementById("btn")
/***
* 可以为按钮的而对应时间绑定处理函数的形式来响应事件
* 这样当事件被触发时,其对应的函数将会被调用
*/
//绑定一个单击事件
btn.onclick = function(){
alert("hello?")
}
</script>
</body>
</html>
获取元素节点
getElementById() => 通过id属性获取一个元素节点对象
getElementsByTagName() => 通过标签名获取一组元素节点对象
getElementsByName() => 通过name属性获取一组元素节点对象
获取元素节点的子节点
getElementsByTagName() => 返回当前节点的指定标签名后代节点
childNodes => 表示当前节点的所有子节点(包括元素节点、属性节点、文本节点)
children => 表示当前节点的所有子元素
firstChild => 表示当前节点的第一个子节点
lastChild => 表示当前节点的最后一个子节点