# DOM相关
DOM(Document Object Model,文档对象模型)是 HTML 和 XML 的应用程序接口(API),DOM 将把整个页面规划成由节点层级构成的文档,HTML 或 XML 页面的每个部分都是一个节点的衍生物,将这些节点封装为对象,通过这些对象对文档进行CRUD的动态操作。看下面示例:
W3C DOM 标准被分为 3 个不同的部分:
- 核心 DOM - 针对任何结构化文档的标准模型
- Document:文档对象
- Element:元素对象
- Attribute:属性对象
- Text:文本对象
- Comment:注释对象
- Node:节点对象,其他5个的父对象
- XML DOM - 针对 XML 文档的标准模型
- HTML DOM - 针对 HTML 文档的标准模型
# 核心DOM
Document:文档对象
创建(获取):在html Dom模型中可以使用window对象来获取如window.document或者document。
常用方法:
- 获取Element对象:
- getElementById():根据id属性值获取元素对象。id属性值一般唯一
- getElementsByTagName():根据元素名称获取元素对象们。返回值是一个数组
- getElementsByClassName():根据Class属性值获取元素对象们。返回值是一个数组
- getElementsByName():根据name属性值获取元素对象们。返回值是一个数组
- 创建其他DOM对象:
- createAttribute(name):创建属性
- createComment():创建注释节点
- createElement():创建元素,比如button,div等等
- createTextNode():创建文本节点
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="div1">div1</div> <div id="div2">div2</div> <div id="div3">div3</div> <div class="cls1">div4</div> <div class="cls1">div5</div> <input type="text" name="username" placeholder="test"> <div id="selfElement"></div> <script> //根据元素名称获取元素对象们。返回值是一个数组 var divs = document.getElementsByTagName("div"); console.log(divs) //根据Class属性值获取元素对象们。返回值是一个数组 var div_cls = document.getElementsByClassName("cls1"); console.log(div_cls) //根据name属性值获取元素对象们。返回值是一个数组 var ele_username = document.getElementsByName("username"); console.log(ele_username) var table = document.createElement("table"); console.log(table); var selfElement = document.getElementById("selfElement"); selfElement.append(table); console.log(selfElement); var commentNode = document.createComment("this is first test"); table.append(commentNode) var nameAttr = document.createAttribute("name"); nameAttr.value = "xie"; table.setAttributeNode(nameAttr) var textNode = document.createTextNode("hello world"); table.appendChild(textNode); </script> </body> </html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51- 获取Element对象:
Element:元素对象
- 获取/创建:通过document来获取和创建
- 方法:
- removeAttribute():删除属性
- setAttribute():设置属性
Node:节点对象,其他5个的父对象,注意所有dom对象都可以被认为是一个节点
- 常用方法:
- appendChild():向节点的子节点列表的结尾添加新的子节点。
- removeChild():删除(并返回)当前节点的指定子节点。
- replaceChild():用新节点替换一个子节点。
- 常用属性:parentNode 返回节点的父节点。
- 常用方法:
# HTMLDOM
- 标签体的设置和获取:innerHTML
- 控制元素样式
- 使用元素的style属性来设置,比如: //修改样式方式1 div1.style.border = "1px solid red"; div1.style.width = "200px"; //font-size--> fontSize div1.style.fontSize = "20px";
- 提前定义好类选择器的样式,通过元素的className属性来设置其class属性值。
# 事件监听机制
事件是某些组件被执行了某些操作后,触发某些代码的执行。有几个常用概念:
- 事件:某些操作。如: 单击,双击,键盘按下了,鼠标移动了
- 事件源:组件。如: 按钮 文本输入框...
- 监听器:代码。
- 注册监听:将事件,事件源,监听器结合在一起。 当事件源上发生了某个事件,则触发执行某个监听器代码。
# 常见的事件
- 点击事件:
- onclick:单击事件。
- ondblclick:双击事件。
- 焦点事件
- onblur:失去焦点。
- onfocus:元素获得焦点。
- 加载事件:
- onload:一张页面或一幅图像完成加载。
- 鼠标事件:
- onmousedown:鼠标按钮被按下。
- onmouseup:鼠标按键被松开。
- onmousemove:鼠标被移动。
- onmouseover:鼠标移到某元素之上。
- onmouseout:鼠标从某元素移开。
- 键盘事件:
- onkeydown:某个键盘按键被按下。
- onkeyup:某个键盘按键被松开。
- onkeypress:某个键盘按键被按下并松开。
- 选择和改变
- onchange:域的内容被改变。
- onselect:文本被选中。
- 表单事件:
- onsubmit:确认按钮被点击。
- onreset:重置按钮被点击。
# 表单提交
注意上面的表单提交验证通过onsubmit事件实现,如果是下面这样是完不成表单验证的:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="#" id="form" onclick="checkForm();">
<input name="username" id="username">
<select id="city">
<option>--请选择--</option>
<option>北京</option>
<option>上海</option>
<option>广州</option>
</select>
<input type="submit" value="提交">
</form>
<script>
function checkForm() {
return false;
}
</script>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
上面的onclick方法相当于:
function fun() {
checkForm();
}
1
2
3
2
3
如果想完成表单验证,需要改成
<form action="#" id="form" onclick="return checkForm();">
</form>
1
2
2
# 获取鼠标位置
下面是一个获取鼠标位置的例子:
# 案例
# 动态表格
做一个动态的表格,有添加删除以及选择等功能: