javaScript的常见类型和事件

数组

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
//定义数组
var v1 = [11,22,33,44];
var v1 = array([11,22,33,44]);

//操作
v1[1];
v1[0] = "txt";

//插入元素
v1.push("ha");//尾部插入 [11,22,33,44,"ha"]

v1.unshift("oo");//头部插入["oo",11,22,33,44,"ha"]
//按索引位置插入 第二个参数0是固定写法
//v1.splice(索引,0,元素)
v1.splice(1,0,"asd");//["oo","asd",11,22,33,44,"ha"]

//删除元素
v1.pop(); //尾部删除 ["oo","asd",11,22,33,44]
v1.shift();//头部删除["asd",11,22,33,44]
//按索引位置删除 第二个参数固定为1
//v1.splice(索引,1)
v1.splice(1,1);//[11,22,33,44]

//循环
for(var idx in v1){
//循环每个元素 idx不是元素 是索引
v1[idx];
}
//或者
for(var i=0;i<v1.length;++i){
v1[i];
}
//也有break 和continue关键字

练习:动态数据

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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul id="city">

</ul>
<script type="text/javascript">
var citys = ["北京","上海","深圳"];
for(var idx in citys){
var text = citys[idx];

//创建li标签
var tag = document.createElement("li");
tag.innerText = text;

var ulCity = document.getElementById("city");
ulCity.appendChild(tag);
}

</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
info = {
"name":"jack",
"age":18
}
//key也可以不加双引号
info = {
name:"jack",
age:18
}

//获取字典元素
info.age
info.name = "mary";

//也可以类似于map一样 不过不可以省略双引号
info["age"]
info["name"] = "mary";

//删除元素
delete info["age"];

//循环
for(var key in info){
//key = name/age data = info[key]
}

练习:动态表格

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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1">
<thread>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
</tr>
</thread>
<tbody id="body">

</tbody>
</table>
<script>
var msg = [
{id: 1, name: "jack", age: 19},
{id: 2, name: "jack", age: 19},
{id: 3, name: "jack", age: 19},
{id: 4, name: "jack", age: 19},
{id: 5, name: "jack", age: 19}
];

for (var idx in msg) {
var info = msg[idx];
var tr = document.createElement("tr");
for (var key in info) {
var td = document.createElement("td");
var text = info[key];
td.innerText = text;
tr.appendChild(td);
}
var body = document.getElementById("body");
body.appendChild(tr);
}

</script>
</body>
</html>

条件语句

1
2
3
4
5
6
7
8
9
if(条件){}
else{}


//或者

if(条件){}
else if(){}
else{}

函数

1
2
3
4
5
6
function func(){
...
}

//执行函数
func()

2.DOM

DOM就是一个模块,可以对HTML页面中的标签进行操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//根据ID获取标签
var tag = document.getElementById("xx");

//获取标签中的文本
tag.innerText

//修改标签中的文本
tage.innerText = "sada";

//创建标签
var tag = document.createElement("div");

//标签里些内容
tag.innerText = "asdsad";
1
2
3
4
5
6
7
8
9
10
11
//往父标签中添加子标签
<ul>
//往这里加li标签
</ul>
<script>
var tag = document.getElementById("city");
var newTag = document.createElement("li");

tag.appendChild(newTag);

</script>

DOM结合事件的绑定

场景描述:页面上有一个按钮,一点击就增加一条数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="button" value="点击添加" onclick="addMsg()">
<ul id="msg">

</ul>
<script type="text/javascript">
function addMsg() {
var ul = document.getElementById("msg");
var li = document.createElement("li");
li.innerText = "hello";

ul.appendChild(li);
}
</script>
</body>
</html>

jQuery

jQuery是一个JavaScript第三方模块

基础jQuery,可以自己开发一个功能

现成的工具依赖jQuery 例如:BootStrap动态效果

1
2
3
4
5
//引入javascript
<script src="static/jquery...(路径)"></script>
<script>
//在这里就可以用了
</script>

寻找标签(直接寻找)

ID选择器

1
<h1 id='txt'></h1>
1
$("#txt")

样式选择器

1
<h1 class="c1"></h1>
1
$(".c1")

标签选择器

1
<h1></h1>
1
$("h1")

层级选择器

1
2
3
4
5
<div class="c1">
<div class="c2">
<a></a>
</div>
</vid>
1
$(".c1 .c2 a")

多选择器

1
2
3
4
5
6
7
8
9
10
<div class="c1">
<div class="c2">
<a></a>
</div>
</vid>
<div class="c4">
<div class="c5">
<a></a>
</div>
</vid>
1
$(".c1 , c.c2")

逗号表示都选

属性选择器

1
2
3
<input type='text' name='n1'>
<input type='text' name='n2'>
<input type='text' name='n3'>
1
$("input[name='n1']")

间接寻找

找到上下的兄弟

1
2
3
4
5
<div>
<div>北京</div>
<div id='c1'>上海</div>
<div>深圳</div>
</div>
1
2
3
4
5
6
7
$("#c1").prev()
$("#c1").next()
//下一个的下一个
$("#c1").next().next()

//所有的兄弟
$("#c1").siblings()

找父子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<div>
<div>
<div>北京</div>
<div id='c1'>上海
<div>xx区</div>
<div class='p10'>xx区</div>
<div>xx区</div>
<div>xx区</div>
</div>
<div>深圳</div>
</div>
</div>
<div>
<div>
<div>北京</div>
<div id='c2'>上海</div>
<div>深圳</div>
</div>
</div>
1
2
3
4
5
6
7
8
$("#c1").parent() //找到父标签
$("#c1").parent().parent //找到父标签的父标签

$("#c1").children()//所有的孩子
$("#c1").children(".p")//孩子中样式为p10的

$("#c1").find("div") //所有的子孙div
$("#c1").find(".p") //所有的子孙样式为p的

练习:菜单的展示与隐藏

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.border {
width: 300px;
height: 800px;
border: 1px solid red;
}

.header {
background-color: yellow;
cursor: pointer;
}

.content a {
display: block;
}

.hide {
display: none;
}
</style>
</head>
<body>
<div class="border">
<div class="item">
<div class="header" onclick="clickMe(this)">上海</div>
<div class="content hide">
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
</div>
</div>
<div class="item">
<div class="header " onclick="clickMe(this)">上海</div>
<div class="content hide">
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
</div>
</div>
<div class="item">
<div class="header " onclick="clickMe(this)">上海</div>
<div class="content hide">
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
</div>
</div>
<div class="item">
<div class="header " onclick="clickMe(this)">上海</div>
<div class="content hide">
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
</div>
</div>
<div class="item">
<div class="header " onclick="clickMe(this)">上海</div>
<div class="content hide">
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
</div>
</div>
<div class="item">
<div class="header " onclick="clickMe(this)">上海</div>
<div class="content hide">
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
</div>
</div>
<div class="item">
<div class="header " onclick="clickMe(this)">上海</div>
<div class="content hide">
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
<a>xx区</a>
</div>
</div>
</div>
<script src="static/js/jquery-3.7.1.min.js"></script>
<script type="text/javascript">
function clickMe(self) {
//判断hide是否存在
var hasHide = $(self).next().hasClass("hide");
if(hasHide){
$(self).next().removeClass("hide");
}else{
$(self).next().addClass("hide");
}

}
</script>
</body>
</html>

改进plus版:要求只有一个展开,其余全合上

1
2
3
4
5
6
7
8
9
10
<script src="static/js/jquery-3.7.1.min.js"></script>
<script type="text/javascript">
function clickMe(self) {
//判断hide是否存在
$(self).next().removeClass("hide");

$(self).parent().siblings().find(".content").addClass("hide");

}
</script>

操作样式

添加样式 addClass

移除样式removeClass

判断样式是否拥有hasClass

值得操作

1
<div id='c1'>内容</div>
1
2
$("#c1").text() //获取文本内容
$("#c1").text("哈哈")//设置文本内容
1
<input type='text' id='c2'/>
1
2
$("#c2").val()//获取用户输入的值
$("#c2").val("askdalksdj")//设置值

动态创建数据

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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="text" placeholder="请输入用户名" id="username">
<input type="text" placeholder="请输入密码" id="password">
<input type="button" value="注册" onclick="getInfo()">

<ul id="userdata">


</ul>


<script src="static/js/jquery-3.7.1.min.js"></script>
<script type="text/javascript">

function getInfo() {
var username = $("#username").val();
var password = $("#password").val();

var newLi = $("<li>").text(username);

$("#userdata").append(newLi)
$("#username").val("");
}
</script>
</body>
</html>

事件(以jQuery绑定事件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<UL>
<li>百度</li>
<li>谷歌</li>
<li>搜狗</li>
</UL>

<script>
$("li").click((function){
//点击li标签时,自动执行这个函数
//$(this) 当前你点击的是那个标签
//例如 $(this).remove() 点击谁在当前页面删除谁
//默认是当前页面加载完成之后才会执行
})

</script>

如果让他更快加载?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<UL>
<li>百度</li>
<li>谷歌</li>
<li>搜狗</li>
</UL>

<script>
$(function(){
//当页面的框架加载完成之后,就立即执行,例如页面中有一个很大的图片,下面那个是图片加载完成之后才会执行,这个是ul和li标签加载完成之后就会执行,默认会在这里加一个这个
})


$("li").click((function){
//点击li标签时,自动执行这个函数
//$(this) 当前你点击的是那个标签
//例如 $(this).remove() 点击谁在当前页面删除谁
//默认是当前页面加载完成之后才会执行
})

</script>

练习:删除表格行

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
52
53
54
55
56
57
58
59
60
61
62
63
64
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1">
<thread>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
</tr>
</thread>
<tbody>
<tr>
<td>1</td>
<td></td>
<td>24</td>
<td><input type="button" value="删除" class="delete"></td>
</tr>
<tr>
<td>1</td>
<td></td>
<td>24</td>
<td><input type="button" value="删除" class="delete"></td>
</tr>
<tr>
<td>1</td>
<td></td>
<td>24</td>
<td><input type="button" value="删除" class="delete"></td>
</tr>
<tr>
<td>1</td>
<td></td>
<td>24</td>
<td><input type="button" value="删除" class="delete"></td>
</tr>
<tr>
<td>1</td>
<td></td>
<td>24</td>
<td><input type="button" value="删除" class="delete"></td>
</tr>
<tr>
<td>1</td>
<td></td>
<td>24</td>
<td><input type="button" value="删除" class="delete"></td>
</tr>
</tbody>
</table>
<script src="static/js/jquery-3.7.1.min.js"></script>
<script type="text/javascript">
$(function(){
$(".delete").click(function (){
$(this).parent().parent().remove();
})
})
</script>
</body>
</html>