JavaScript(三)Document Object Model

前面提到,完整的 Javascript 由以下三个部分组成:

  • 语言基础
  • BOM(Browser Object Model 浏览器对象模型)
  • DOM(Document Object Model 文档对象模型)

这一篇主要讲讲 DOM ,DOM 其实就是把 html 里面的各种数据当作对象进行操作的一种思路。

pic

那么 DOM 有什么作用呢?

通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。

  • 能够改变页面中的所有 HTML 元素或属性
  • 能够改变页面中的所有 CSS 样式
  • 能够对页面中的所有事件做出反应

改变HTML元素和属性

改变元素内容

把 Hello World 替换成了 WTF

1
2
3
4
5
6
7
8
9
10
11
<html>
<body>

<p id="p1">Hello World!</p>

<script>
document.getElementById("p1").innerHTML="WTF";
</script>

</body>
</html>

改变元素属性

把 smiley.gif替换成了 landscape.jpg

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html>
<body>

<img id="image" src="smiley.gif">

<script>
document.getElementById("image").src="landscape.jpg";
</script>

</body>
</html>

当用户点击按钮时,改变CSS属性

1
2
3
<h1 id="id1">My Heading 1</h1>

<button type="button" onclick="document.getElementById('id1').style.color='red'">点击这里</button>

效果:

My Heading 1

  • 使用onmouseover= 来让鼠标移到上面时发生事件,onmouseout=来让鼠标移除时发生事件
  • 使用onclick=来让鼠标点击时发生事件
  • 使用onchange=来让

onmousedown, onmouseup 以及 onclick 构成了鼠标点击事件的所有部分。首先当点击鼠标按钮时,会触发 onmousedown 事件,当释放鼠标按钮时,会触发 onmouseup 事件,最后,当完成鼠标点击时,会触发 onclick 事件。

改变元素的 class

1
document.getElementById("btn_1").className = 'btn btn-light btn-margin';

删除前提示

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
<script>
function deleteRow(link) {
var c = confirm("确定删除吗?");
if (!c) return;

var table = document.getElementById("nameTable");
var td = link.parentNode;
var tr = td.parentNode;
var index = tr.rowIndex;
table.deleteRow(index);
}
</script>

<table border="1" id="nameTable">
<tr>
<td>名字</td>
<td>操作</td>
</tr>
<tr>
<td>Jerry</td>
<td>
<a href="#" onclick="deleteRow(this)">删除</a>
</td>
</tr>
<tr>
<td>Calm</td>
<td>
<a href="#" onclick="deleteRow(this)">删除</a>
</td>
</tr>
<tr>
<td>Superman</td>
<td>
<a href="#" onclick="deleteRow(this)">删除</a>
</td>
</tr>
</table>
  • 通过document.getElementById("nameTable")获取到这张表
  • link就是this,通过link.parentNodetd.parentNode获取到所在的这一行
  • 通过tr.rowIndex获取到这一行的下标index
  • 通过 table.deleteRow(index) 删除这一行

登录前判断用户名或密码是否为空

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
<body>

<script>
function login() {
var name = document.getElementById("name");
if (name.value.length === 0){
alert("用户名不能为空");
return false;
}

var psw = document.getElementById("password")
if (psw.value.length === 0){
alert("密码不能为空")
return false;
}

return true;
}
</script>

<form method="get" action="https://www.google.com" onsubmit="return login()">
账号:<input type="text" name="name" id="name" > <br/>
密码:<input type="password" name="password" id="password" > <br/>
<input type="submit" value="登录">
<input type="reset" value="重置">
</form>
</body>

效果:

账号: 密码:
  • document.getElementById("name")来获取账号输入框的内容
  • 在表单中,用onsubmit="return login()"来验证登录

注册时验证年龄必须是数字 / 整数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var age = document.getElementById("age");
if(age.value.length==0){
alert("年龄不能为空");
return false;
}
if(isNaN(age.value)){
alert("年龄必须是数字");
return false;
}

if(parseInt(age.value)!=age.value){
alert("年龄必须是整数");
return false;
}
return true;

验证 Email 格式

1
2
3
4
5
6
7
8
var Regex = /^(?:\w+\.?)*\w+@(?:\w+\.)*\w+$/;      

if (!Regex.test(email.value)){
alert("email格式不正确");
return false;
}
return true;
}

隐藏和显示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div id="d">
一个普通的div
</div>

<script>
function hide(){
var d = document.getElementById("d");
d.style.display="none";
}

function show(){
var d = document.getElementById("d");
d.style.display="block";
}

</script>
  • document.getElementById("d")来获取对象
  • d.style.display来设置对象的隐藏和显示