Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5b6019b

Browse files
committed
update:DOM 操作
1 parent 6c0f4d9 commit 5b6019b

File tree

3 files changed

+425
-347
lines changed

3 files changed

+425
-347
lines changed

03-JavaScript基础/22-正则表达式.md

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@
2929

3030
- (2)使用 reg 的test() 方法,判断指定字符串是否符合规则。
3131

32+
**正则表达式的`test()`方法**:【重要】
33+
34+
```javascript
35+
myReg.test(str); // 判断字符串 str 是否符合 指定的 myReg 这个正则表达式的规则
36+
```
37+
38+
解释:使用`test()`这个方法可以用来检查一个字符串是否符合正则表达式的规则,**如果符合则返回true,否则返回false**
39+
3240
我们来看看下面的例子。
3341

3442
**1、传一个参数时**
@@ -51,14 +59,6 @@
5159

5260
注意,上面的例子中,我们是先定义了一个正则表达式的规则,然后通过正则表达式的`test()`方法来判断字符串是否符合之前定义的规则。
5361

54-
正则表达式的`test()`方法:
55-
56-
```javascript
57-
myReg.test(str); // 判断字符串 str 是否符合 指定的 myReg 这个正则表达式的规则
58-
```
59-
60-
解释:使用`test()`这个方法可以用来检查一个字符串是否符合正则表达式的规则,**如果符合则返回true,否则返回false**
61-
6262
**2、传两个参数时**:匹配模式 【重要】
6363

6464
构造函数 RegExp 中,也可以传两个参数。我们可以传递一个**匹配模式**作为第二个参数。这个参数可以是:
@@ -325,6 +325,19 @@ match()这个方法还是很实用的,可以在一个很长的字符串中,
325325
str = str.replace(/\s*$/, ""); //去除结尾的空格
326326
```
327327

328+
### 判断字符串是否为电子邮件
329+
330+
正则实现:
331+
332+
```javascript
333+
var emailReg = /^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;
334+
335+
var email = "[email protected]";
336+
337+
console.log(emailReg.test(email));
338+
```
339+
340+
328341
## 我的公众号
329342

330343
想学习**代码之外的技能**?不妨关注我的微信公众号:**千古壹号**(id:`qianguyihao`)。
@@ -334,4 +347,3 @@ match()这个方法还是很实用的,可以在一个很长的字符串中,
334347
![](http://img.smyhvae.com/20190101.png)
335348

336349

337-
Lines changed: 326 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,326 @@
1+
2+
> 本文最初发表于[博客园](http://www.cnblogs.com/smyhvae/p/8366012.html),并在[GitHub](https://github.com/qianguyihao/Web)上持续更新**前端的系列文章**。欢迎在GitHub上关注我,一起入门和进阶前端。
3+
4+
> 以下是正文。
5+
6+
## 事件简介
7+
8+
事件:就是文档或浏览器窗口中发生的一些特定的交互瞬间。对于 Web 应用来说,有下面这些代表性的事件:点击某个元素、将鼠标移动至某个元素上方、关闭弹窗等等。
9+
10+
JavaScript 是以**事件驱动为核心**的一门语言。JavaScript 与 HTML 之间的交互是通过事件实现的。
11+
12+
### 事件的三要素
13+
14+
**事件的三要素:事件源、事件、事件驱动程序**
15+
16+
比如,我用手去按开关,灯亮了。这件事情里,事件源是:手。事件是:按开关。事件驱动程序是:灯开了或者关了。
17+
18+
再比如,网页上弹出一个广告,我点击右上角的`X`,广告就关闭了。这件事情里,事件源是:`X`。事件是:onclick。事件驱动程序是:广告关闭了。
19+
20+
于是我们可以总结出:谁引发的后续事件,谁就是事件源。
21+
22+
**总结如下:**
23+
24+
- 事件源:引发后续事件的html标签。
25+
26+
- 事件:js已经定义好了(见下图)。
27+
28+
- 事件驱动程序:对样式和html的操作。也就是DOM。
29+
30+
也就是说,我们可以在时间对应的属性中写一些js代码,当事件被触发时,这些代码将会执行。
31+
32+
**代码书写步骤如下:**(重要)
33+
34+
- (1)获取事件源:document.getElementById(“box”); // 类似于Android里面的findViewById
35+
36+
- (2)绑定事件: 事件源box.事件onclick = function(){ 事件驱动程序 };
37+
38+
- (3)书写事件驱动程序:关于DOM的操作。
39+
40+
最简单的代码举例:(点击box1,然后弹框)
41+
42+
```html
43+
<body>
44+
<div id="box1"></div>
45+
46+
<script type="text/javascript">
47+
// 1、获取事件源
48+
var div = document.getElementById("box1");
49+
// 2、绑定事件
50+
div.onclick = function () {
51+
// 3、书写事件驱动程序
52+
alert("我是弹出的内容");
53+
}
54+
</script>
55+
56+
</body>
57+
```
58+
59+
常见的事件如下:
60+
61+
![](http://img.smyhvae.com/20180126_1553.png)
62+
63+
下面针对这事件的三要素,进行分别介绍。
64+
65+
### 1、获取事件源的方式(DOM节点的获取)
66+
67+
获取事件源的常见方式如下:
68+
69+
```javascript
70+
var div1 = document.getElementById("box1"); //方式一:通过id获取单个标签
71+
72+
var arr1 = document.getElementsByTagName("div"); //方式二:通过 标签名 获得 标签数组,所以有s
73+
74+
var arr2 = document.getElementsByClassName("hehe"); //方式三:通过 类名 获得 标签数组,所以有s
75+
```
76+
77+
### 2、绑定事件的方式
78+
79+
方式一:直接绑定匿名函数
80+
81+
```html
82+
<div id="box1" ></div>
83+
84+
<script type="text/javascript">
85+
var div1 = document.getElementById("box1");
86+
//绑定事件的第一种方式
87+
div1.onclick = function () {
88+
alert("我是弹出的内容");
89+
}
90+
</script>
91+
```
92+
93+
方式二:先单独定义函数,再绑定
94+
95+
```html
96+
<div id="box1" ></div>
97+
98+
<script type="text/javascript">
99+
var div1 = document.getElementById("box1");
100+
//绑定事件的第二种方式
101+
div1.onclick = fn; //注意,这里是fn,不是fn()。fn()指的是返回值。
102+
//单独定义函数
103+
function fn() {
104+
alert("我是弹出的内容");
105+
}
106+
</script>
107+
```
108+
109+
注意上方代码的注释。**绑定的时候,是写fn,不是写fn()**。fn代表的是整个函数,而fn()代表的是返回值。
110+
111+
方式三:行内绑定
112+
113+
```html
114+
<!--行内绑定-->
115+
<div id="box1" onclick="fn()"></div>
116+
117+
<script type="text/javascript">
118+
119+
function fn() {
120+
alert("我是弹出的内容");
121+
}
122+
123+
</script>
124+
```
125+
126+
注意第一行代码,绑定时,是写的`"fn()"`,不是写的`"fn"`。因为绑定的这段代码不是写在js代码里的,而是被识别成了**字符串**
127+
128+
### 3、事件驱动程序
129+
130+
我们在上面是拿alert举例,不仅如此,我们还可以操作标签的属性和样式。举例如下:
131+
132+
点击鼠标时,原本粉色的div变大了,背景变红:
133+
134+
```html
135+
<style>
136+
#box1 {
137+
width: 100px;
138+
height: 100px;
139+
background-color: pink;
140+
cursor: pointer;
141+
}
142+
</style>
143+
</head>
144+
145+
<body>
146+
147+
<div id="box1" ></div>
148+
149+
<script type="text/javascript">
150+
var div1 = document.getElementById("box1");
151+
//点击鼠标时,原本粉色的div变大了,背景变红了
152+
div1.onclick = function () {
153+
div1.style.width = "200px"; //属性值要写引号
154+
div1.style.height = "200px";
155+
div1.style.backgroundColor = "red"; //属性名是backgroundColor,不是background-color
156+
}
157+
</script>
158+
```
159+
160+
上方代码的注意事项:
161+
162+
- 在js里写属性值时,要用引号
163+
164+
- 在js里写属性名时,是`backgroundColor`,不是CSS里面的`background-color`
165+
166+
实现效果如下:
167+
168+
![](http://img.smyhvae.com/20180126_1720.gif)
169+
170+
### onload事件
171+
172+
> onload事件比较特殊,这里单独讲一下。
173+
174+
**当页面加载(文本和图片)完毕的时候,触发onload事件。**
175+
176+
举例:
177+
178+
```html
179+
<script type="text/javascript">
180+
window.onload = function () {
181+
console.log("smyhvae"); //等页面加载完毕时,打印字符串
182+
}
183+
</script>
184+
```
185+
186+
有一点我们要知道:**js的加载是和html同步加载的**。因此,如果使用元素在定义元素之前,容易报错。这个时候,onload事件就能派上用场了,我们可以把使用元素的代码放在onload里,就能保证这段代码是最后执行。
187+
188+
建议是:整个页面上所有元素加载完毕在执行js内容。所以,window.onload可以预防使用标签在定义标签之前。
189+
190+
### 事件举例:京东顶部广告栏
191+
192+
![](http://img.smyhvae.com/20180122_1020.png)
193+
194+
比如上面这张图,当鼠标点击右上角的`X`时,关掉整个广告栏,这就要用到事件。
195+
196+
代码实现如下:
197+
198+
```html
199+
<!DOCTYPE html>
200+
<html>
201+
<head lang="en">
202+
<meta charset="UTF-8">
203+
<title></title>
204+
<style>
205+
* {
206+
padding: 0;
207+
margin: 0;
208+
}
209+
.top-banner {
210+
background-color: pink;
211+
height: 80px;
212+
}
213+
.w {
214+
width: 1210px;
215+
margin: 10px auto;
216+
position: relative;
217+
}
218+
img {
219+
display: block;
220+
width: 1210px;
221+
height: 80px;
222+
background-color: blue;
223+
}
224+
a {
225+
position: absolute;
226+
top: 5px;
227+
right: 5px;
228+
color: #fff;
229+
background-color: #000;
230+
text-decoration: none;
231+
width: 20px;
232+
height: 20px;
233+
font: 700 14px/20px "simsum";
234+
text-align: center;
235+
}
236+
.hide {
237+
display: none!important;
238+
}
239+
</style>
240+
</head>
241+
<body>
242+
<div class="top-banner" id="topBanner">
243+
<div class="w">
244+
<img src="" alt=""/>
245+
<a href="#" id="closeBanner">×</a>
246+
</div>
247+
</div>
248+
249+
250+
<script>
251+
//需求:点击案例,隐藏盒子。
252+
//思路:点击a链接,让top-banner这个盒子隐藏起来(加隐藏类名)。
253+
254+
//1.获取事件源和相关元素
255+
var closeBanner = document.getElementById("closeBanner");
256+
var topBanner = document.getElementById("topBanner");
257+
//2.绑定事件
258+
closeBanner.onclick = function () {
259+
//3.书写事件驱动程序
260+
//类控制
261+
// topBanner.className += " hide"; //保留原类名,添加新类名
262+
topBanner.className = "hide";//替换旧类名(方式一)
263+
// topBanner.style.display = "none"; //方式二:与上一行代码的效果相同
264+
}
265+
266+
</script>
267+
</body>
268+
</html>
269+
270+
```
271+
272+
注意最后一行代码,这种方式会替换旧类名,意思是,不管之前的类名叫什么,都会被修改。
273+
274+
### 事件举例:
275+
276+
要求实现效果:当鼠标悬停在img上时,更换为另外一张图片;鼠标离开时,还原为本来的图片。
277+
278+
代码实现:
279+
280+
```html
281+
<!DOCTYPE html>
282+
<html>
283+
<head lang="en">
284+
<meta charset="UTF-8">
285+
<title></title>
286+
<script>
287+
//window.onload页面加载完毕以后再执行此代码
288+
window.onload = function () {
289+
//需求:鼠标放到img上,更换为另一张图片,也就是修改路径(src的值)。
290+
//步骤:
291+
//1.获取事件源
292+
//2.绑定事件
293+
//3.书写事件驱动程序
294+
295+
//1.获取事件源
296+
var img = document.getElementById("box");
297+
//2.绑定事件(悬停事件:鼠标进入到事件源中,立即触发事件)
298+
img.onmouseover = function () {
299+
//3.书写事件驱动程序(修改src)
300+
img.src = "image/jd2.png";
301+
// this.src = "image/jd2.png";
302+
}
303+
304+
//2.绑定事件(悬停事件:鼠标进入到事件源中,立即触发事件)
305+
img.onmouseout = function () {
306+
//3.书写事件驱动程序(修改src)
307+
img.src = "image/jd1.png";
308+
}
309+
}
310+
</script>
311+
</head>
312+
<body>
313+
314+
<img id="box" src="image/jd1.png" style="cursor: pointer;border: 1px solid #ccc;"/>
315+
316+
</html>
317+
```
318+
319+
## 我的公众号
320+
321+
想学习**代码之外的技能**?不妨关注我的微信公众号:**千古壹号**(id:`qianguyihao`)。
322+
323+
扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外:
324+
325+
![](http://img.smyhvae.com/20190101.png)
326+

0 commit comments

Comments
 (0)