前端Web-JavaScript(下)

[复制链接]
发表于 2026-2-13 18:35:02 | 显示全部楼层 |阅读模式
告急是补全一下JavaScript

根本对象:

String对象

语法格式

方式1:
var 变量名 = new String("…") ; //方式一

比方:
var str = new String("Hello String");
 方式2:
var 变量名 = '…' ; //方式二
 比方:
 var str = 'Hello String';

 属性和方法

String对象也提供了一些常用的属性和方法:
属性:
属性形貌length字符串的长度。方法:
方法形貌charAt()返回在指定位置的字符。indexOf()检索字符串。trim()去除字符串两边的空格substring()提取字符串中两个指定的索引号之间的字符。length属性:
length属性可以用于返回字符串的长度,添加如下代码
//length
console.log(str.length);
charAt()函数:
charAt()函数用于返回在指定索引位置的字符,函数的参数就是索引。添加如下代码
 console.log(str.charAt(4));
indexOf()函数
indexOf()函数用于检索指定内容在字符串中的索引位置的,返回值是索引,参数是指定的内容。添加如下代码
console.log(str.indexOf("lo"));
trim()函数
trim()函数用于去除字符串两边的空格的。添加如下代码:
var s = str.trim();
console.log(s.length);
substring()函数
substring()函数用于截取字符串的,函数有2个参数。
参数1:表现从谁人索引位置开始截取。包罗
参数2:表现到谁人索引位置竣事。不包罗
 console.log(s.substring(0,5));
 团体代码如下:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7.     <title>JS-对象-String</title>
  8. </head>
  9. <body>
  10.    
  11. </body>
  12. <script>
  13.     //创建字符串对象
  14.     //var str = new String("Hello String");
  15.     var str = "  Hello String    ";
  16.     console.log(str);
  17.     //length
  18.     console.log(str.length);
  19.     //charAt
  20.     console.log(str.charAt(4));
  21.     //indexOf
  22.     console.log(str.indexOf("lo"));
  23.     //trim
  24.     var s = str.trim();
  25.     console.log(s.length);
  26.     //substring(start,end) --- 开始索引, 结束索引 (含头不含尾)
  27.     console.log(s.substring(0,5));
  28. </script>
  29. </html>
复制代码
JSON对象

自界说对象

在 JavaScript 中自界说对象特殊简朴,其语法格式如下:
  1. var 对象名 = {
  2.     属性名1: 属性值1,
  3.     属性名2: 属性值2,
  4.     属性名3: 属性值3,
  5.     方法名称: function(形参列表){}
  6. };
复制代码
我们可以通过如下语法调用属性:
对象名.属性名
 通过如下语法调用函数:
对象名.方法名()
 代码示例:
  1. <script>
  2.     //自定义对象
  3.     var user = {
  4.         name: "soyo",
  5.         age: 17,
  6.         gender: "女",
  7.         sing: function(){
  8.              console.log("为什么要演奏春日影");
  9.          }
  10.     }
  11.     console.log(user.name);
  12.     user.eat();
  13. <script>
复制代码
简化版:
  1. <script>
  2.     //自定义对象
  3.     var user = {
  4.         name: "soyo",
  5.         age: 17,
  6.         gender: "女",
  7.         sing(){
  8.              console.log("为什么要演奏春日影");
  9.          }
  10.     }
  11.     console.log(user.name);
  12.     user.eat();
  13. <script>
复制代码
 JSON先容

JSON对象:JavaScript Object Notation,JavaScript对象标记法。JSON是通过JavaScript标记法誊写的文本。其格式如下:
  1. {
  2.     "key":value,
  3.     "key":value,
  4.     "key":value
  5. }
复制代码
此中,key必须使用引号而且是双引号标记,value可以是恣意数据范例。
比方我们可以直接百度搜索“json在线剖析”,任意挑一个进入,然后编写内容如下:
  1. {
  2.         "name": "李传播"
  3. }
复制代码

但是当我们将双引号切换成单引号,再次校验,则报错,如下图所示: 
 

 而由于语法简朴,层级结构光显,现多用于作为数据载体,在网络中举行数据传输。
 

 界说
  1. var userStr = '{"name":"Tom", "age":18, "addr":["北京","上海","西安"]}';
  2. alert(userStr.name);
复制代码
欣赏器输出效果如下:
 

由于上述是一个json格式的字符串,不是JS对象,以是我们必要借助JS中提供的JSON对象,来将json字符串和JS对象之间来完成转换。  
 JSON字符串 -> JS对象
  1. var obj = JSON.parse(userStr);
  2. alert(obj.name);
复制代码
 此时欣赏器输出效果如下:

 JS对象 -> JSON字符串
  1. alert(JSON.stringify(obj));
复制代码
 欣赏器输出效果如图所示:

团体全部代码如下:
  1. <!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>JS-对象-JSON</title></head><body>    <script>        // JSON对象        var userStr = '{"name":"Tom", "age":18, "addr":["北京","上海","西安"]}';        // alert(userStr.name);        var obj = JSON.parse(userStr);        alert(obj.name);               
  2. alert(JSON.stringify(obj));    </script></body></html>
复制代码
BOM对象

BOM的全称是Browser Object Model,翻译过来是欣赏器对象模子。
也就是JavaScript将欣赏器的各个构成部分封装成了对象。我们要操纵欣赏器的部分功能,可以通过操纵BOM对象的相干属性大概函数来完成。
比方:我们想要将欣赏器的所在改为`http://www.baidu.com`,我们就可以通过BOM中提供的location对象的href属性来完成,代码如下:`location.href='http://www.baidu.com'`
BOM中提供了如下5个对象:
对象名称形貌Window欣赏器窗口对象Navigator欣赏器对象Screen屏幕对象History汗青记载对象Locationd所在栏对象 上述5个对象与欣赏器各构成对应的关系如下图所示:

 对于上述5个对象,比力常用的是Window对象、Location对象这2个。
 Window对象

window对象指的是欣赏器窗口对象,是JavaScript的全部对象,以是对于window对象,可以直接使用,而且对于window对象的方法和属性,可以省略window.比方:alert()函数实在是属于window对象的,其完备的代码如下:
  1. window.alert('hello');//可以简写
  2. alert('hello')
复制代码
以是对于window对象的属性和方法,都是接纳简写的方式。window提供了很多属性和方法,下表列出了常用属性和方法
window对象提供了获取其他BOM对象的属性:
属性形貌history用于获取history对象location用于获取location对象Navigator用于获取Navigator对象Screen用于获取Screen对象 要使用location对象,只必要通过代码window.location大概简写location即可使用
alert()函数:弹出告诫框,函数的内容就是告诫框的内容

confirm()函数:弹出确认框,而且提供用户2个按钮,分别是确认和取消。
添加如下代码:
  1. confirm("您确认删除该记录吗?");
复制代码
 

但是怎么知道用户点击了确认还是取消呢?以是这个函数有一个返回值,当用户点击确认时,返回true,点击取消时,返回false。根据返回值来决定是否实行后续操纵。修改代码如下:再次运行,可以检察返回值true大概false  
  1. var flag =
  2. confirm("您确认删除该记录吗?");alert(flag);
复制代码
setInterval(fn,毫秒值):定时器,用于周期性的实行某个功能,而且是循环实行。该函数必要转达2个参数:
fn:函数,必要周期性实行的功能代码
毫秒值:隔断时间
解释掉之前的代码,添加代码如下:
  1. //定时器 - setInterval -- 周期性的执行某一个函数
  2. var i = 0;
  3. setInterval(function(){
  4.      i++;
  5.      console.log("定时器执行了"+i+"次");
  6. },2000);
复制代码

setTimeout(fn,毫秒值) :定时器,只会在一段时间后**实行一次功能**。参数和上述setInterval划一
解释掉之前的代码,添加代码如下:
  1. //定时器 - setTimeout -- 延迟指定时间执行一次
  2. setTimeout(function(){
  3.         alert("JS");
  4. },3000);
复制代码
 欣赏器打开,3s后弹框,关闭弹框,发现再也不会弹框了。

Location对象

location是指代欣赏器的所在栏对象,对于这个对象,我们常用的是href属性,用于获取大概设置欣赏器的所在信息,添加如下代码:
  1. //获取浏览器地址栏信息
  2. alert(location.href);
  3. //设置浏览器地址栏信息
  4. location.href = "https://www.bilibili.com";
复制代码
欣赏器效果如下:起首弹框展示欣赏器所在栏信息,
 

然后点击确定后,由于我们设置了所在栏信息,以是欣赏器跳转到bilibili 
完备代码如下:
  1. <!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>JS-对象-BOM</title></head><body>    </body><script>    //获取    // window.alert("Hello BOM");    // alert("Hello BOM Window");    //方法    //confirm - 对话框 -- 确认: true , 取消: false    // var flag =
  2. confirm("您确认删除该记录吗?");    // alert(flag);    //定时器 - setInterval -- 周期性的实行某一个函数    // var i = 0;    // setInterval(function(){    //     i++;    //     console.log("定时器实行了"+i+"次");    // },2000);    //定时器 - setTimeout -- 耽误指定时间实行一次     // setTimeout(function(){    //     alert("JS");    // },3000);        //location    alert(location.href);    location.href = "https://www.bilibili.com";</script></html>
复制代码
DOM

 DOM先容

DOM:Document Object Model 文档对象模子。也就是 JavaScript 将 HTML 文档的各个构成部分封装为对象。
封装的对象分为
- Document:整个文档对象
- Element:元素对象
- Attribute:属性对象
- Text:文本对象
- Comment:解释对象

告急作用如下:
- 改变 HTML 元素的内容
- 改变 HTML 元素的样式(CSS)
- 对 HTML DOM 变乱作出反应
- 添加和删除 HTML 元素
从而到达动态改变页面效果目的

DOM对象

- DOM对象:欣赏器根据HTML标签天生的JS对象
  - 全部的标签属性都可以在这个对象上面找到
  - 修改这个对象的属性,就会主动映射到标签身上
- DOM的焦点头脑:将网页的内容当做对象来处置处罚
- document对象
  - 网页中全部内容都封装在document对象中
  - 它提供的属性和方法都是用来访问和操纵网页内容的,如:document.write(…)
- DOM操纵步调:
  - 获取DOM元素对象
  - 操纵DOM对象的属性或方法 (查阅文档)
 获取DOM对象

可以通过如下两种方式来获取DOM元素。

  •         根据CSS选择器来获取DOM元素,获取到匹配到的第一个元素:document.querySelector('CSS选择器');
  •         根据CSS选择器来获取DOM元素,获取匹配到的全部元素:document.querySelectorAll('CSS选择器');
注意:获取到的全部元素,会封装到一个NodeList节点聚集中,是一个伪数组(有长度、有索引的数组,但是没有push、pop等数组方法)
代码示例:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7.     <title>JS-对象-DOM</title>
  8. </head>
  9. <body>
  10.     <span id="sid">DOM元素1</span>
  11.     <span class="txt">DOM元素2</span>
  12.     <span class="txt">DOM元素3</span>
  13.     <script>
  14.         //根据CSS选择器获取DOM元素, 获取到匹配的第一个元素
  15.         let s1 = document.querySelector('#sid');
  16.         console.log(s1);
  17.             
  18.         //根据CSS选择器获取DOM元素, 获取到匹配的所有元素
  19.         let s2 = document.querySelectorAll('.txt');
  20.         s2.forEach(s => console.log(s))
  21.     </script>
  22. </body>
  23. </html>
复制代码
操纵属性
通过查询文档资料,如下图所示:

案例

需求:订单付出完成后,5秒之后跳转到体系首页(www.jd.com)
 

分析
- 要实现倒计时效果,那实在倒计时,就是每1秒钟,实行一次,把数字往下减1,直到数据减为0 。以是,这里我们必要用到一个定时器:setInterval(...)
- 跳转网页,实在控制的所在栏的所在,那这里我们就必要通过 location 来设置所在栏的信息 。
 实现
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7.     <title>Document</title>
  8.     <style>
  9.         .center {
  10.             text-align: center;
  11.             margin-top: 50px;
  12.         }
  13.     </style>
  14. </head>
  15. <body>
  16.     <div class="center">
  17.         您好, 支付完成, <span id="time">5</span> 秒之后将自动跳转至 <a href="https://www.jd.com">官网</a> 首页 ~
  18.     </div>
  19.        
  20.     <script>
  21.         //1. 获取时间对应的DOM元素
  22.         let time = document.querySelector('#time');
  23.         //2. 开启定时器, 每秒将时间往下减一 , 如果时间>0 , 更新DOM元素的内容 ; 如果时间 < 0 , 则跳转页面 ;
  24.         count = time.innerHTML;
  25.         let timer = setInterval(() => {
  26.             count--;
  27.             if (count > 0) {
  28.                 time.innerHTML = count;
  29.             } else {
  30.                 clearInterval(timer);
  31.                 location.href = 'https://www.jd.com';
  32.             }
  33.         }, 1000);
  34.     </script>
  35. </body>
  36. </html>
复制代码


JS变乱

当我们用户在注册页面输入完内容,网页可以主动的提示我们用户名已经存在还是可以使用。那么是怎么知道我们用户名输入完了呢?这就必要用到JavaScript中的变乱了。
 


变乱先容

什么是变乱呢?HTML变乱是发生在HTML元素上的 “变乱”,比方:
- 按钮被点击
- 鼠标移到元素上
- 输入框失去焦点
- 按下键盘按键
- ........
而我们可以给这些变乱绑定函数,当变乱触发时,可以主动的完成对应的功能。这就是变乱监听。比方:对于我们所说的百度注册页面,我们给用户名输入框的失去焦点变乱绑定函数,当我们用户输入完内容,在标签外点击了鼠标,对于用户名输入框来说,失去焦点,然后实行绑定的函数,函数举行用户名内容的校验等操纵。JavaScript变乱是js非常告急的一部分
以是告急围绕:
- 变乱监听
- 常用变乱
变乱监听

JS变乱监听的语法: 
  1. 事件源.addEventListener('事件类型', 要执行的函数);
复制代码
在上述的语法中包罗三个要素: 
- 变乱源: 哪个dom元素触发了变乱, 要获取dom元素
- 变乱范例: 用什么方式触发, 比如: 鼠标单击 click, 鼠标颠末 mouseover
- 要实行的函数: 要做什么事
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7.     <title>JS-事件-事件绑定</title>
  8. </head>
  9. <body>
  10.     <input type="button" id="btn1" value="点我一下">
  11.     <input type="button" id="btn2" value="点我一下试试">
  12.         
  13.     <script>
  14.         document.querySelector("#btn1").addEventListener('click', ()=>{
  15.             alert("按钮1被点击了...");
  16.         })
  17.     </script>
  18. </body>
  19. </html>
复制代码
JavaScript对于变乱的绑定还提供了别的2种方式(早期版本):
1). 通过html标签中的变乱属性举行绑定
比方一个按钮,对于按钮可以绑定单机变乱,可以借助标签的onclick属性,属性值指向一个函数。
  1. <input type="button" id="btn1" value="点我一下试试" onclick="on()">
  2. <script>
  3.         function on(){
  4.         alert('试试就试试')
  5.     }
  6. </script>
复制代码
通过DOM中Element元素的变乱属性举行绑定
html中的标签被加载成element对象,以是也可以通过element对象的属性来操纵标签的属性。
比方一个按钮,可以绑定单机变乱,可以通过DOM元素的属性,为其办变乱绑定。
  1. <body>
  2.       <input type="button" id="btn1" value="点我一下试试1">
  3.       
  4.   <script>
  5.       document.querySelector('#btn1').onclick = function(){
  6.           alert("按钮2被点击了...");
  7.       }
  8.   </script>
  9.   </body>
复制代码
 团体代码如下:
  1. <!DOCTYPE html>
  2.   <html lang="en">
  3.   <head>
  4.       <meta charset="UTF-8">
  5.       <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6.       <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7.       <title>JS-事件-事件绑定</title>
  8.   </head>
  9.   
  10.   <body>
  11.       <input type="button" id="btn1" value="事件绑定1">
  12.       <input type="button" id="btn2" value="事件绑定2">
  13.       
  14.       <script>
  15.           document.querySelector("#btn1").addEventListener('click', ()=>{
  16.               alert("按钮1被点击了...");
  17.           })
  18.                  
  19.           document.querySelector('#btn2').onclick = function(){
  20.               alert("按钮2被点击了...");
  21.           }
  22.       </script>
  23.   </body>
  24.   </html>
复制代码
addEventListener 与 on变乱 区别:
- on方式会被覆盖,addEventListener 方式可以绑定多次,拥有更多特性,保举使用 addEventListener . 

常见变乱


示例演示: 
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7.     <title>JS-事件-常见事件</title>
  8. </head>
  9. <body>
  10.     <form action="" style="text-align: center;">
  11.         <input type="text" name="username" id="username">
  12.         <input type="text" name="age" id="age">
  13.         <input id="b1" type="submit" value="提交">
  14.         <input id="b2" type="button" value="单击事件">
  15.     </form>
  16.     <br><br><br>
  17.     <table width="800px" border="1" cellspacing="0" align="center">
  18.         <tr>
  19.             <th>学号</th>
  20.             <th>姓名</th>
  21.             <th>分数</th>
  22.             <th>评语</th>
  23.         </tr>
  24.         <tr align="center">
  25.             <td>001</td>
  26.             <td>张三</td>
  27.             <td>90</td>
  28.             <td>很优秀</td>
  29.         </tr>
  30.         <tr align="center" id="last">
  31.             <td>002</td>
  32.             <td>李四</td>
  33.             <td>92</td>
  34.             <td>优秀</td>
  35.         </tr>
  36.     </table>
  37.     <script>
  38.         //click: 鼠标点击事件
  39.         document.querySelector('#b2').addEventListener('click', () => {
  40.             console.log("我被点击了...");
  41.         })
  42.         //mouseenter: 鼠标移入
  43.         document.querySelector('#last').addEventListener('mouseenter', () => {
  44.             console.log("鼠标移入了...");
  45.         })
  46.         //mouseleave: 鼠标移出
  47.         document.querySelector('#last').addEventListener('mouseleave', () => {
  48.             console.log("鼠标移出了...");
  49.         })
  50.         //keydown: 某个键盘的键被按下
  51.         document.querySelector('#username').addEventListener('keydown', () => {
  52.             console.log("键盘被按下了...");
  53.         })
  54.         //keydown: 某个键盘的键被抬起
  55.         document.querySelector('#username').addEventListener('keyup', () => {
  56.             console.log("键盘被抬起了...");
  57.         })
  58.         //blur: 失去焦点事件
  59.         document.querySelector('#age').addEventListener('blur', () => {
  60.             console.log("失去焦点...");
  61.         })
  62.         //focus: 元素获得焦点
  63.         document.querySelector('#age').addEventListener('focus', () => {
  64.             console.log("获得焦点...");
  65.         })
  66.         //input: 用户输入时触发
  67.         document.querySelector('#age').addEventListener('input', () => {
  68.             console.log("用户输入时触发...");
  69.         })
  70.         //submit: 提交表单事件
  71.         document.querySelector('form').addEventListener('submit', () => {
  72.             alert("表单被提交了...");
  73.         })
  74.     </script>
  75. </body>
  76. </html>
复制代码
表格隔行换色案例


分析:当鼠标引入表格,出现一个颜色,脱离之后颜色立刻变为默认的白色了。 那这就涉及到鼠标移入变乱 mouseenter、鼠标移失变乱 mouseleave。
实现:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7.     <title>Document</title>
  8.     <style>
  9.         table {
  10.             /* 设置表格的宽度 */
  11.             width: 60%;
  12.             /* 将表格边框合并,消除单元格之间的间距 */
  13.             border-collapse: collapse;
  14.             /* 将表格边框间的距离设置为0,确保没有任何间距 */
  15.             border-spacing: 0;
  16.             /* 文本居中对齐 */
  17.             text-align: center;
  18.             /* 版心居中展示 */
  19.             margin: auto;
  20.             /* 距离顶部的外边距 */
  21.             margin-top: 20px;
  22.             /* 行高 */
  23.             line-height: 30px;
  24.             /* 字体 */
  25.             font-family: 'Courier New', 华文中宋, monospace;
  26.         }
  27.         table,tr,th,td {
  28.             /* 设置表格的边框 */
  29.             border: 1px solid black;
  30.         }
  31.         h1 {
  32.             /* 文本居中对齐 */
  33.             text-align: center;
  34.         }
  35.         .footer_btn {
  36.             /* 文本居中对齐 */
  37.             text-align: center;
  38.             margin-top: 10px;
  39.         }
  40.     </style>
  41. </head>
  42. <body>
  43.     <h1 id="title">用户信息表</h1>
  44.     <table>
  45.         <tr>
  46.             <th>编号</th>
  47.             <th>姓名</th>
  48.             <th>年龄</th>
  49.             <th>性别</th>
  50.             <th>爱好</th>
  51.         </tr>
  52.         <tr class="data">
  53.             <td>1</td>
  54.             <td>Tom</td>
  55.             <td>18</td>
  56.             <td>男</td>
  57.             <td>Java , JS , HTML , Vue</td>
  58.         </tr>
  59.         <tr class="data">
  60.             <td>2</td>
  61.             <td>Cat</td>
  62.             <td>12</td>
  63.             <td>女</td>
  64.             <td>Java , JS , HTML , Vue</td>
  65.         </tr>
  66.         <tr class="data">
  67.             <td>3</td>
  68.             <td>Lee</td>
  69.             <td>21</td>
  70.             <td>男</td>
  71.             <td>Java , Vue</td>
  72.         </tr>
  73.         <tr class="data">
  74.             <td>4</td>
  75.             <td>Jerry</td>
  76.             <td>19</td>
  77.             <td>女</td>
  78.             <td>JS , HTML , Vue</td>
  79.         </tr>
  80.         <tr class="data">
  81.             <td>5</td>
  82.             <td>Jack</td>
  83.             <td>25</td>
  84.             <td>男</td>
  85.             <td>Java</td>
  86.         </tr>
  87.         <tr class="data">
  88.             <td>6</td>
  89.             <td>Jones</td>
  90.             <td>22</td>
  91.             <td>女</td>
  92.             <td>HTML , Vue</td>
  93.         </tr>
  94.     </table>
  95.     <script>
  96.         //1. 获取表格中的数据行 DOM对象
  97.         let trs = document.querySelectorAll('.data');
  98.         //2. 判断, 如果是奇数行, 设置背景颜色为 #FBFBD4; 如果是偶数行, 设置背景颜色为: #D9D9FA
  99.         for (let i = 0; i < trs.length; i++) {
  100.             const tr = trs[i];
  101.             tr.addEventListener('mouseenter', ()=> {
  102.                 if(i % 2 == 0){ //偶数
  103.                     tr.style = "background-color: #D9D9FA";
  104.                 }else { //奇数
  105.                     tr.style = "background-color: #FBFBD4";
  106.                 }
  107.             })
  108.             
  109.             tr.addEventListener('mouseleave', ()=> {
  110.                 tr.style = "background-color: #FFFFFF";
  111.             })
  112.         }
  113.     </script>
  114. </body>
  115. </html>
复制代码
表单校验案例

需求:完成用户注册的表单校验操纵,要求做到以下两点。
1. 在表单项中输入完成,鼠标脱离焦点时,举行表单项内容的校验,假如内容格式不精确,表现提示信息。
2. 在表单提交时,校验整个表单内容,假如内容格式有一项不精确,弹出提示信息,克制表单数据提交。

分析:

  •         JS的变乱监听:离焦变乱 blur,表单提交变乱 submit
  •         DOM对象操纵
 实现:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>表单</title>
  5.     <style>
  6.         label {
  7.             display: inline-block;
  8.             width: 80px;
  9.             text-align: right;
  10.             margin-right: 10px;
  11.         }
  12.         input {
  13.             width: 250px;
  14.             padding: 10px;
  15.             border: 1px solid #ccc;
  16.             border-radius: 5px;
  17.             margin-bottom: 10px;
  18.         }
  19.         .btn {
  20.             width: 150px;
  21.         }
  22.         .tip {
  23.             color: #ff0000;
  24.             font-size: 12px;
  25.         }
  26.     </style>
  27. </head>
  28. <body>
  29.     <div>
  30.         <h1>用户注册</h1>
  31.         <form>
  32.             <label for="username">用户名:</label>
  33.             <input type="text" id="username" name="username" placeholder="用户名不能为空且长度在4-16个字符">
  34.             <span class="tip" id="name_msg"></span> <br>
  35.             <label for="phone">手机号:</label>
  36.             <input type="text" id="phone" name="phone" placeholder="手机号不能为空且长度为11位">
  37.             <span class="tip" id="phone_msg"></span>
  38.             <br>
  39.             <input type="submit" value="提交" class="btn">
  40.             <input type="reset" value="重置" class="btn">
  41.         </form>
  42.     </div>
  43.     <script>
  44.         //1. 校验用户名 - 失去焦点时校验 - blur
  45.         function checkUsername(){ //true, 合法; false, 不合法;
  46.             let flag = true;
  47.             let usernameValue = document.querySelector('#username').value;
  48.             let errMsg = "";
  49.             if(usernameValue.length < 4 || usernameValue.length > 16){
  50.                 errMsg = "用户名不合法";
  51.                 flag = false;
  52.             }
  53.             document.querySelector('#name_msg').innerHTML = errMsg;
  54.             return flag;
  55.         }
  56.         document.querySelector('#username').addEventListener('blur', checkUsername);
  57.         //2. 校验手机号
  58.         function checkPhone(){ //true, 合法; false, 不合法;
  59.             let flag = true;
  60.             let phoneValue = document.querySelector('#phone').value;
  61.             let errMsg = "";
  62.             if(phoneValue.length != 11 ){
  63.                 errMsg = "手机号不合法";
  64.                 flag = false;
  65.             }
  66.             document.querySelector('#phone_msg').innerHTML = errMsg;
  67.             return flag;
  68.         }
  69.         document.querySelector('#phone').addEventListener('blur', checkPhone)
  70.         //3. 表单提交的时候 - 校验整个表单 - submit
  71.         document.querySelector('form').addEventListener('submit', function(event){
  72.             //判断用户名及手机号是否合法, 如果不合法, 提示错误信息;
  73.             if(!checkUsername() || !checkPhone()){
  74.                 alert('表单数据不合法');
  75.                
  76.                 //组织表单默认的提交事件
  77.                 event.preventDefault();//组织事件的默认行为
  78.             }
  79.         })
  80.     </script>
  81. </body>
  82. </html>
复制代码
注意:JavaScript中,可以通过变乱对象event中的preventDefault() 方法来克制变乱的默认举动,比如克制表单提交。
固然表单校验功能,基于DOM操纵已经完成了,乐成的校验了用户名和暗码的长度,长度不符合条件,直接提示错误信息,并不允许表单提交,但是对于手机号,是只要11位就可以了吗?
- 12209120990
- 11009120990
- 1220912abcd
我们发现,上述的字符串,长度都是11位,但是却不是正当的手机号 。由于手机号,是必要符合特定规则的,比如全部都是数字,而且第一位,必须是1,第二位,可以是 3/4/5/6/7/8/9 ,然后背面是9位数字。
应该怎样来校验雷同于手机号这种,特定规则的字符串就必要通过正则表达式来校验了

 正则表达式

- 先容:正则表达式(Regular Expression,也简称为正则),界说了字符串构成的规则。
- 作用:通常用来验证数据格式、查找更换文本 等。
- 界说:
  - 正则表达式字面量 (注意不要加引号)
  1. const reg1 = /abc/;
复制代码
创建正则对象RegExp
  1. const reg2 = new RegExp('abc');
复制代码

  •         方法:
            test(str):判定指定字符串是否符合规则,符合返回true;不符合返回false。
  •         语法:

    •                 平常字符:大多数的字符仅能形貌它们本身,这些字符称作平常字符,比如字母和数字。
    •                 特殊字符:是一些具有特殊寄义的字符,可以极大进步了机动性和强盛的匹配功能。
    •                 量词:表现要匹配的字符或表达式的数量。

符号寄义^表现以谁开始$表现以谁竣事[]表现某个范围内的单个字符,如:[0-9]单个数字字符.表现恣意单个字符,除了换行和行竣事符\w代表单词字符:字母、数字、下划线(_),相当于[A-Za-z0-9_]\d代表数字字符:相当于[0-9]\s代表空格(包罗换行符、制表符、空格等)符号寄义?零个或一个*零个或多个+一个或多个(至少一个){n}n个{m,}至少m个{m,n}至少m个,最多n个示例: 
  1. <script>    let str1 = 'hello World';    let str2 = '二哈很二o';    let str3 = 'er哈就是很二o';    let str4 = '二哈就是很二';    console.log(/\w+/.test(str1)); //true    console.log(/\w+/.test(str2)); //true    console.log(/\w+/.test(str3)); //true    console.log(/\w+/.test(str4)); //false   
  2. const reg1 = /abc/;   
  3. const reg2 = new RegExp('abc');    console.log(reg1.test('my name is : abc')); //true    console.log(reg2.test('my name is : abc')); //true  </script>
复制代码
通过正则表达式来校验表单中用户名、手机号 具体代码如下:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>表单</title>
  5.     <style>
  6.         label {
  7.             display: inline-block;
  8.             width: 80px;
  9.             text-align: right;
  10.             margin-right: 10px;
  11.         }
  12.         input {
  13.             width: 250px;
  14.             padding: 10px;
  15.             border: 1px solid #ccc;
  16.             border-radius: 5px;
  17.             margin-bottom: 10px;
  18.         }
  19.         .btn {
  20.             width: 150px;
  21.         }
  22.         .tip {
  23.             color: #ff0000;
  24.             font-size: 12px;
  25.         }
  26.     </style>
  27. </head>
  28. <body>
  29.     <div>
  30.         <h1>用户注册</h1>
  31.         <form>
  32.             <label for="username">用户名:</label>
  33.             <input type="text" id="username" name="username" placeholder="用户名不能为空且长度在4-16个字符">
  34.             <span class="tip" id="name_msg"></span> <br>
  35.             <label for="phone">手机号:</label>
  36.             <input type="text" id="phone" name="phone" placeholder="手机号不能为空且长度为11位">
  37.             <span class="tip" id="phone_msg"></span>
  38.             <br>
  39.             <input type="submit" value="提交" class="btn">
  40.             <input type="reset" value="重置" class="btn">
  41.         </form>
  42.     </div>
  43.     <script>
  44.         //在鼠标离开焦点时, 校验输入框内容的长度 .
  45.         //校验用户名
  46.         function checkUsername(){ //true, 合法; false, 不合法;
  47.             let flag = true;
  48.             let usernameValue = document.querySelector('#username').value;
  49.             let errMsg = "";
  50.             if(!/^\w{4,16}$/.test(usernameValue)){
  51.                 errMsg = "用户名不合法";
  52.                 flag = false;
  53.             }
  54.             document.querySelector('#name_msg').innerHTML = errMsg;
  55.             return flag;
  56.         }
  57.         document.querySelector('#username').addEventListener('blur', checkUsername)
  58.         //校验密码
  59.          function checkPhone(){ //true, 合法; false, 不合法;
  60.             let flag = true;
  61.             let phoneValue = document.querySelector('#phone').value;
  62.             let errMsg = "";
  63.             if(!/^1[3-9]\d{9}$/.test(phoneValue)){
  64.                 errMsg = "手机号不合法";
  65.                 flag = false;
  66.             }
  67.             document.querySelector('#phone_msg').innerHTML = errMsg;
  68.             return flag;
  69.         }
  70.         document.querySelector('#phone').addEventListener('blur', checkPhone)
  71.         //在表单提交时, 判断是否所有的输入框输入的值合法 .
  72.         document.querySelector('form').addEventListener('submit', (e)=> {
  73.             if(!checkUsername() || !checkPhone()){
  74.                 alert('表单校验失败, 不能提交表单')
  75.                 e.preventDefault();
  76.             }
  77.         })
  78.     </script>
  79. </body>
  80. </html>
复制代码
 JS模块化

所谓JS模块化,指的是JS提供的一种,将JavaScript步伐拆分位多少个可按需导入的单独模块的机制。
比如,我们前面实现的表单校验的案例,我们是可以把JS代码单独的抽取到一个js文件中,然后在html中引入对应的js文件即可,如许做,便于管理、提升代码的复用性。具体操纵如下:
 界说一个js文件,定名位 check.js
  1. //在鼠标离开焦点时, 校验输入框内容的长度 .
  2. //校验用户名
  3. function checkUsername(){ //true, 合法; false, 不合法;
  4.     let flag = true;
  5.     let usernameValue = document.querySelector('#username').value;
  6.     let errMsg = "";
  7.     if(!/^\w{4,16}$/.test(usernameValue)){
  8.         errMsg = "用户名不合法";
  9.         flag = false;
  10.     }
  11.     document.querySelector('#name_msg').innerHTML = errMsg;
  12.     return flag;
  13. }
  14. document.querySelector('#username').addEventListener('blur', checkUsername)
  15. //校验密码
  16. function checkPhone(){ //true, 合法; false, 不合法;
  17.     let flag = true;
  18.     let phoneValue = document.querySelector('#phone').value;
  19.     let errMsg = "";
  20.     if(!/^1[3-9]\d{9}$/.test(phoneValue)){
  21.         errMsg = "手机号不合法";
  22.         flag = false;
  23.     }
  24.     document.querySelector('#phone_msg').innerHTML = errMsg;
  25.     return flag;
  26. }
  27. document.querySelector('#phone').addEventListener('blur', checkPhone)
  28. //在表单提交时, 判断是否所有的输入框输入的值合法 .
  29. document.querySelector('form').addEventListener('submit', (e)=> {
  30.     if(!checkUsername() || !checkPhone()){
  31.         alert('表单校验失败, 不能提交表单')
  32.         e.preventDefault();
  33.     }
  34. })
复制代码
 在html文件中,假如必要用到上述的JS代码,直接在 script 标签中引入该js即可。
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>表单</title>
  5.     <style>
  6.         label {
  7.             display: inline-block;
  8.             width: 80px;
  9.             text-align: right;
  10.             margin-right: 10px;
  11.         }
  12.         input {
  13.             width: 250px;
  14.             padding: 10px;
  15.             border: 1px solid #ccc;
  16.             border-radius: 5px;
  17.             margin-bottom: 10px;
  18.         }
  19.         .btn {
  20.             width: 150px;
  21.         }
  22.         .tip {
  23.             color: #ff0000;
  24.             font-size: 12px;
  25.         }
  26.     </style>
  27. </head>
  28. <body>
  29.     <div>
  30.         <h1>用户注册</h1>
  31.         <form>
  32.             <label for="username">用户名:</label>
  33.             <input type="text" id="username" name="username" placeholder="用户名不能为空且长度在4-16个字符">
  34.             <span class="tip" id="name_msg"></span> <br>
  35.             <label for="phone">手机号:</label>
  36.             <input type="text" id="phone" name="phone" placeholder="手机号不能为空且长度为11位">
  37.             <span class="tip" id="phone_msg"></span>
  38.             <br>
  39.             <input type="submit" value="提交" class="btn">
  40.             <input type="reset" value="重置" class="btn">
  41.         </form>
  42.     </div>
  43.     <script src="./js/check.js"></script>
  44. </body>
  45. </html>
复制代码
这是在html中,引入JS文件,可以直接使用 `<script src=".."></script>` 来引入。 假如是在一个js文件中,必要用到别的一个js文件中的方法呢
那在JS中,就给我们提供了模块化导入、导出的操纵,可以通过 `export` 关键字,来导出模块。 然后在别的必要用到的地方,通过 `import` 关键字导入模块。
如下所示:
 `checkFn.js` 中界说是校验方法
在变量前面加上 `export` 代表,将该变量、函数、对象导出为一个模块。别的js中要想使用,就可以  `import` 导入了。
  1. export function checkUsername(){ //true, 合法; false, 不合法;
  2.   let flag = true;
  3.   let usernameValue = document.querySelector('#username').value;
  4.   let errMsg = "";
  5.   if(!/^\w{4,16}$/.test(usernameValue)){
  6.       errMsg = "用户名不合法";
  7.       flag = false;
  8.   }
  9.   document.querySelector('#name_msg').innerHTML = errMsg;
  10.   return flag;
  11. }
  12. export function checkPhone(){ //true, 合法; false, 不合法;
  13.   let flag = true;
  14.   let phoneValue = document.querySelector('#phone').value;
  15.   let errMsg = "";
  16.   if(!/^1[3-9]\d{9}$/.test(phoneValue)){
  17.       errMsg = "手机号不合法";
  18.       flag = false;
  19.   }
  20.   document.querySelector('#phone_msg').innerHTML = errMsg;
  21.   return flag;
  22. }
复制代码
check.js 中界说的是校验的变乱监听
在check.js中必要用到 checkUsername、checkPhone函数,就可以通过 import 关键字将其导入进来。
  1. import {checkUsername, checkPhone} from './checkFn.js'
  2. //1. 校验用户名 - 失去焦点时校验 - blur
  3. document.querySelector('#username').addEventListener('blur', checkUsername)
  4. //2. 校验手机号
  5. document.querySelector('#phone').addEventListener('blur', checkPhone)
  6. //3. 表单提交的时候 - 校验整个表单 - submit
  7. document.querySelector('form').addEventListener('submit', function(event){
  8.     //判断用户名及手机号是否合法, 如果不合法, 提示错误信息;
  9.     if(!checkUsername() || !checkPhone()){
  10.         alert('表单数据不合法');
  11.         
  12.         //组织表单默认的提交事件
  13.         event.preventDefault();//组织事件的默认行为
  14.     }
  15. })
复制代码
`xxx.html` 中就是html的根本代码样式
注意:假如使用到了 `export`, `import` 这种模块化的js,那在通过 `<script src="..."></script>` 在引入JS文件时,必须指定 `type="module"` 属性,表名我们使用的是模块化的JS。 如下所示:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>表单</title>
  5.     <style>
  6.         label {
  7.             display: inline-block;
  8.             width: 80px;
  9.             text-align: right;
  10.             margin-right: 10px;
  11.         }
  12.         input {
  13.             width: 250px;
  14.             padding: 10px;
  15.             border: 1px solid #ccc;
  16.             border-radius: 5px;
  17.             margin-bottom: 10px;
  18.         }
  19.         .btn {
  20.             width: 150px;
  21.         }
  22.         .tip {
  23.             color: #ff0000;
  24.             font-size: 12px;
  25.         }
  26.     </style>
  27. </head>
  28. <body>
  29.     <div>
  30.         <h1>用户注册</h1>
  31.         <form>
  32.             <label for="username">用户名:</label>
  33.             <input type="text" id="username" name="username" placeholder="用户名不能为空且长度在4-16个字符">
  34.             <span class="tip" id="name_msg"></span> <br>
  35.             <label for="phone">手机号:</label>
  36.             <input type="text" id="phone" name="phone" placeholder="手机号不能为空且长度为11位">
  37.             <span class="tip" id="phone_msg"></span>
  38.             <br>
  39.             <input type="submit" value="提交" class="btn">
  40.             <input type="reset" value="重置" class="btn">
  41.         </form>
  42.     </div>
  43.         <!-- 模块化JS引入方式,需要指定type="module" -->
  44.     <script type="module" src="./js/check.js"></script>
  45. </body>
  46. </html>
复制代码
注意:假如使用模块的js,使用了 `export`,`import` ,要包管我们的代码,肯定是在服务器端运行,而不是在磁盘中直接打开。 以是运行的时间,在VSCode中已经要右键选择 "Open with Live Server"。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表