JavaScript-DOM-offset家族
-
offset家族用来测量元素的宽高,偏移距离
-
语法:
- offsetWidth
- offsetHeight
- offsetLeft
- offsetTop
-
获取元素的盒模型宽度高度
-
元素外侧:margin
-
offset测量的宽高,是元素一下三个部分之和
- 元素最外层:border
- 元素内部:padding
- 元素的宽度:content
-
var box = document.getElementById("box") // 获取元素的盒模型宽度 var width = box.offsetWidth console.log(width) // 获取元素的盒模型高度 var heigth = box.offsetHeight console.log(heigth)
-
-
offset 性能问题:
- offset在进行元素的宽高、偏移测量的时候浏览器对其操作是,先把元素取出页面,然后再进行测量,测量之后再放入到页面之中
- 页面因为元素缺失导致元素重新排列行为我们称之为回流;
- 页面因为js操作导致颜色发生改变,那么我们称之为重绘
- 这两个行为是浏览器性能杀手,其中回流对浏览器的性能影响最为重大
-
offsetLeft、offsetTop
-
测量元素距离当前元素父级元素的偏移距离;
-
给元素添加margin值,然后获取元素的offsetLeft、offsetTop
-
var box1 = document.getElementById("box") // 获取元素的offsetLeft值 // 我们需要对页面基础样式清零才可以得到精准的元素偏移 var left = box1.offsetLeft console.log(left) // 获取元素的offsetTop值 var top = box1.offsetTop console.log(top)
-
-
offset家族测量偏移的坑
- offset家族测量偏移的时候都是根据参照物元素进行测量的;
- 参照物的元素就是:当前元素的定位父级
- 当前元素的定位父级:当前元素父级之中带有position属性的元素,如果父级之中没有那么就已body为参照物
- 和元素定位的参照物几乎完全一致
JavaScript-正则表达式
- 正则表达式也可以翻译为 => 规则表达式
- 所谓的规则表达式,表达是字符串的规则
- 规则表达式 abc 怎么编写规则:/abc/;
- 正则表达式的学习路线;
- 创建正则表达式;
- 元字符;
- 数量关系;
- 修饰符;
- API学习;
JavaScript-正则表达式-创建正则表达式
-
创建正则表达式:
- 字面量:所见即所得
- 构造函数:创建一个对象
-
字面量创建正则表达式:(推荐使用)
-
用字面量创建正则表达式的时候,正则表达式表达的规则不能为空
-
判断字符a
-
// 用字面量创建正则表达式的时候,正则表达式表达的规则不能为空 // 判断字符a var reg = /a/; console.log(reg) // 打印结果:/a/
-
-
构造函数创建正则表达式
-
可以创建一个空的正则表达式
-
// 构造函数创建正则表达式 // 可以创建一个空的正则表达式 var reg2 = new RegExp(); console.log(reg2) // 打印结果:/(?:)/
-
JavaScript-正则表达式-正则表达式的应用
-
主要处理字符串;
-
一个练习,获取字符串之中所有的字符a;
-
// 获取字符串之中所有字符a var str = "alkhakfhakhfpoajll;jadjopalJDJPOAJ;LJAHIOAHDJHANHKAHODHOSSanckafkoanklahoianalkjapo"
-
编写正则是 a;
-
如果获取到所有符合规则的字符,那么我们必须使用修饰符
-
修饰符我们放在正则的后方,修饰符可以表达我们的查询
-
// 编写正则:规则是a // 如果获取到所有符合规则的字符,那么我们必须使用修饰符 // 修饰符我们放在正则的后方,修饰符可以表达我们的查询 var reg = /a/g;
-
-
用字符串API = >match;找到符合规则的字符
-
match 会根据正则描述的规则,在字符串之中找到所有符合规则的字符,并放入到数组之中进行返回
-
// API:字符串API match; // match 会根据正则描述的规则,在字符串之中找到所有符合规则的字符,并放入到数组之中进行返回 var res = str.match(reg); console.log(res)
-
-
如果还想要获取字符串之中别的字符
-
需要使用 | 来增加规则可以匹配的条件
-
// 需要使用 | 来增加规则可以匹配的条件; var reg = /a|k/g;
-
-
JavaScript-正则表达式-元字符
-
元字符:就是可以表达一个字符多种情况的写法
-
什么是元字符:[ ] 元字符就是中括号,只不过用在正则之中我们把这种计算规则称之为元字符
- 我们可以再元字符之中填写n个字符,这些字符表示一个字符的n种情况;
- 重要认知:元字符只能表示一个字符的多种情况,只有一个字符
-
用元字符来进行一个小练习
-
var str = "吴彦祖比杨彦祖,刘彦祖,吕彦祖,张彦祖,程彦祖帅很多!但是差距也不那么太大"
-
我们希望在字符串之中匹配到所有的彦祖
-
用元字符来进行查找更为方便
-
var str = "吴彦祖比杨彦祖,刘彦祖,吕彦祖,张彦祖,程彦祖帅很多!但是差距也不那么太大"; // 我们希望在字符串之中匹配到所有的彦祖 // 用元字符来进行查找更为方便 // - 什么是元字符 : [] 元字符就是中括号,只不过用在正则之中我们把这种计算规则称之为元字符; // - 我们可以在元字符之中填写 n 个字符, 这些字符表示一个字符的n种情况; // - 重要认知 : 元字符只能表示一个字符的多种情况,只有一个字符! var reg = /[吴杨刘吕张程]彦祖/g; // 使用match在字符串之中进行查找; var res = str.match(reg); console.log(res);
-
-
元字符的高级使用技巧:
-
范围符:-
-
获取字符串之中的所有数字
-
var str = "ljdhajhoahiohi2992khakhfohfk23klfhsklahfoiefeoi9kheohfiof30khfioahfo888;fjoaojf2joop2oipi4hdsohoi7"
-
// 获取字符串之中的所有数字 var str = "ljdhajhoahiohi2992khakhfohfk23klfhsklahfoiefeoi9kheohfiof30khfioahfo888;fjoaojf2joop2oipi4hdsohoi7"; var reg = /[0-9]/g; var res = str.match(reg) console.log(res)
-
如果数字范围恰好是0-9 那么我可以用 \d 简写来直接表达这个规则
-
// 如果数字范围恰好是0-9 那么我可以用 \d 简写来直接表达这个规则 var reg = /\d/g; var res = str.match(reg) console.log(res)
-
用[0123456789]和[0-9]还有 \d 表达的规则是完全一致的
-
-
反向匹配:
-
获取字符串之中所有非数字字符;
-
尖:^
-
如果在元字符之中出现了 ^ 符号则表示,除了元字符之中规定的字符,其他字符都可以
-
反向匹配范围非常大,所以在使用的时候一定想好了在用,不要盲目使用反向匹配
-
匹配非数字字符
- ```js
// 反向匹配
var str = “ljdhajhoahiohi2992khakhfohfk23klfhsklahfoiefeoi9kheohfiof30khfioahfo888;fjoaojf2joop2oipi4hdsohoi7”;
// 匹配非数字字符
var reg = /[^0-9]/g;
var res = str.match(reg)
console.log(res)
- ```js
-
非数字匹配和数字匹配的简写很近似,非数字匹配就是数字匹配简写大写 \D
-
-
-
元字符范围简写:
- \w:数字字母下划线
- \W:非数字字母下划线
- \s:空白字符(换行符、回车符、空格符、制表符、……)
- \S:非空字符
-
任意字符:.
- 这个 . 是不包含部分空白字符的;
-
转义字符:\
- 如果我们的规则就是字符 ”.“ 并且 “.” 恰好是正则表达式的运算规则,那么我们就需要使用 \进行转义
正则表达式应用
JavaScript-正则表达式-量词(限定符)
-
所谓量词就是单个规则出现的次数
- 可以限定单个字符的规则:默认限定的是单个字符的规则
- 可以限定多个字符共同组成的规则;(我们需要用到小括号进行范围的限制)
-
量词语法:{字符规则重复的数量}
-
量词语法非常灵活:
- {min ,max}最少出现min次,最多出现max次
- {min , }最少出现min次,最多可以出现无数次
-
量词存在简写
- {1,} = 简写为> + :最少出现一次,最多不限出现次数
- {0,} = 简写为> * :可以不出现也可以出现无限多次,这种量词少用,我们不应该在规则限定的时候让规则过于宽松
- {0,1} = 简写为> ? :可有可无;
-
var str = "4jkhfhdiofh5lkfao6fh88io8okfhi963seof5ifhihfi98" // 获取所有的数字 // 可以用量词表示数字的位数 // 量词语法:{字符规则重复的数量} // 量词语法非常灵活: // - {min ,max}最少出现min次,最多出现max次 // - {min , }最少出现min次,最多可以出现无数次 var reg = /\d{2,}/g; var res = str.match(reg) console.log(res)
JavaScript-正则表达式-固话规则正则表达式
-
区号规则:三位树顶区号,另外一种是四位数的区号;
- 固话号码规则:7位数
-
固话规则:
- 难点:区号可以不写
- 范围限定符:();通常配合量词使用,可以限定一个范围规则出现的次数
-
固话规则易错点:
-
在使用test验证字符串规则的时候,如果字符串之中有一部分符合了正则表达式的规则,那么判断结果就为true
-
为了让我们的test判断严谨,我们需要让正则表达式表达字符串完全符合正则规则才可以
- ^ :在元字符之中表示非,在元字符之外表示开头
- $ :表示字符串结尾
-
我们需要在正则表达式之中加入开头结尾限定,这样表示让字符串完整符合正则规则
-
var reg_telephone = /^(0\d{2,3}-)?\d{7,8}$/;
-
-
判断字符串是否符合正则描述的规则:
-
正则表达式的API:语法 正则.test(字符串)
-
计算结果是true 或者 false 代表字符串符合或者不符合正则表达式规则
-
// 判断字符串是否符合正则描述的规则: // - 正则表达式的API:语法 正则.test(字符串) // 计算结果是true 或者 false 代表字符串符合或者不符合正则表达式规则 var str = prompt("请输入您的固定电话号码") console.log(str) // - 用字符串匹配正则规则 if(reg_telephone.test(str)){ // 如果正确执行这里的代码 alert("您输入的电话号码正确") }else{ // 如果错误执行的是这里的代码 alert("电话号码都不会写????") }
-
-
注意:我们在使用test的时候尽量给正则表达式添加开头结尾,让我们的正则表达式表达规则
- 同时不要使用 g 修饰符,会让程序出现很多诡异的bug
JavaScript-正则表达式-字符串API
-
字符串API:字符串提供一些专门配合正则表达式使用的API,这些API需要我们具备了正则表达式知识之后才可以使用自如
- search:根据正则规则,找到字符串之中符合规则的字符位置;
- match:根据正则规则,找到字符串之中符合规则的字符并以数组的形式进行返回;
- replace:根据正则规则,找到字符串之中符合规则的字符并进行替换;
-
search 案例:
-
search 返回值是字符串第一个符合规则字符的下标
-
// - search 案例: var str = "hello world"; var reg = /l/; var res = str.search(reg) // search 返回值是字符串第一个符合规则字符的下标 console.log(res) // 打印结果:1 l的下标
-
-
match 案例:
-
不带 g 正则表达式的match结果:是一个字符的完整查询信息
-
带 g 正则表达式match结果:所有符合规则字符的数组
-
// - match 案例: var reg2 = /l/g; var res2 = str.match(reg2); console.log(res2); // 不带 g 正则表达式的match结果:是一个字符的完整查询信息 // 带 g 正则表达式match结果:所有符合规则字符的数组
-
-
replace 案例:
-
想要屏蔽 hello world 之中的所有o,把o替换成 **
-
// - replace 案例: // - 想要屏蔽 hello world 之中的所有o,把o替换成 ** // - 正则之中添加 g 则表示 全局匹配,替换所有字符串之中符合规则的字符 // - 不添加 g 表示就近匹配,匹配符合规则的结果之后立即终止匹配 var reg3 = /o/g; var res3 = str.replace(reg3 , "*") console.log(res3)
-
JavaScript-正则表达式-字符串API-练习标记重点文字
-
两个注意的点
- replace高级应用
- 组的应用
-
需求:
- 通过输入的文字。创建正则表达式;
- 并且根据正则表达式匹配到的结果进行字符的替换,把匹配结果外部添加上 span标签
-
replace高级应用写法:
-
<!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>Document</title> <style> span{ background-color: tomato; } </style> </head> <body> <p id="article"> 我家的后面有一个很大的园,相传叫作百草园。现在是早已并屋子一起卖给朱文公的子孙了,连那最末次的相见也已经隔了七八年,其中似乎确凿只有一些野草;但那时却是我的乐园。 不必说碧绿的菜畦,光滑的石井栏,高大的皂荚树,紫红的桑椹;也不必说鸣蝉在树叶里长吟,肥胖的黄蜂伏在菜花上,轻捷的叫天子(云雀)忽然从草间直窜向云霄里去了。单是周围的短短的泥墙根一带,就有无限趣味。 油蛉在这里低唱,蟋蟀们在这里弹琴。翻开断砖来,有时会遇见蜈蚣;还有斑蝥,倘若用手指按住它的脊梁,便会拍的一声,从后窍喷出一阵烟雾。何首乌藤和木莲藤缠络着,木莲有莲房一般的果实,何首乌有臃肿的根。 有人说,何首乌根是有像人形的,吃了便可以成仙,我于是常常拔它起来,牵连不断地拔起来,也曾因此弄坏了泥墙,却从来没有见过有一块根像人样。如果不怕刺,还可以摘到覆盆子,像小珊瑚珠攒成的小球,又酸又甜,色味都比桑椹要好得远。 </p> <script> // 1. replace高级应用 // 2. 组的应用 // - 通过输入的文字。创建正则表达式; // - 并且根据正则表达式匹配到的结果进行字符的替换,把匹配结果外部添加上 span标签; // 1. 获取匹配字符串 var p = document.getElementById("article") // - 1.1 获取标签内部的文字 var str = p.innerHTML // 2. 编写符合规则的正则表达式 // - 外部输入的规则 // - 接受匹配字符串的变量 var reg_string = prompt("请输入要标记的字符"); // - 字符串不可以和正则相拼接 // - 我们可以用构造函数配合字符串创建正则 var reg = new RegExp(reg_string , "g"); // - 把文章进行replace文本替换; var res = str.replace(reg , "<span>" + reg_string + "</span>") // - 把处理好的文本放入到p标签之中 p.innerHTML = res; </script> </body> </html>
-
-
正则表达式之中的组-组的写法:
-
这个组只有在replace里面好用:我们在替换数据的时候可以使用到匹配到的数据
-
组的使用方法分成两个部分:
- 正则表达式之中用 () 限定起来的部分被称之为组规则;
- 组从左到右分别为 组1 组2 …… 依次类推,但是最多不能超过20个组
-
// 组的写法 // 1. 获取匹配字符串 var p = document.getElementById("article") // - 1.1 获取标签内部的文字 var str = p.innerHTML // 2. 编写符合规则的正则表达式 // - 外部输入的规则 // - 接受匹配字符串的变量 var reg_string = prompt("请输入要标记的字符"); // - 字符串不可以和正则相拼接 // - 我们可以用构造函数配合字符串创建正则 // - 我们给正则添加组:在字符串外部拼接一个小括号 var reg = new RegExp("(" + reg_string +")", "g"); console.log(reg) // - 把文章进行replace文本替换; var res = str.replace(reg , "<span>$1</span>") // - 把处理好的文本放入到p标签之中 p.innerHTML = res;
JavaScript-正则表达式-表单验证
-
表单验证广泛应用于前端的各个项目之中,这个案例非常重要
-
案例的必备知识点:
- 必须具备事件知识;
- 必须具备DOM操作;
-
输入框事件
-
获取焦点:focus;让input获取光标的操作行为会触发获取焦点事件;
- ```JS
// 获取焦点
// handler:处理
// handlerFocus:处理聚焦事件
function handlerFocus(){
// console.log(“输入框获取焦点”)
tip.style.display = “block”
}
ipt.onfocus = handlerFocus
- ```JS
-
失去焦点:blur;让input失去光标的操作行为会触发失去焦点事件;
-
```JS
// 失去焦点
function handlerBlur(){
// 隐藏提示
tip.style.display = “none”// 判定用户输入内容是否符合规则
// - 1. 编写固话规则正则
var reg_telephone = /^(0\d{2,3}-)?\d{7,8}$/;
// - 2. 判定用户输入的内容是否符合正则规则
// - 获取用户输入的内容需要使用 dom.value 进行获取
if(reg_telephone.test(ipt.value)){
// 执行这里的代码表示用户输入内容正确
// - 提示方式:让输入框的边框颜色变成绿色
ipt.style.borderColor = “green”
}else{
// 执行这里的代码表示用户输入内容错误
// - 提示方式:让输入框的边框颜色变成红色
ipt.style.borderColor = “red”
}
}
ipt.onblur = handlerBlur
-
-
给dom对象添加事件的语法:dom.事件名 = 事件处理函数
-
事件处理函数:事件触发的时候会执行的函数
-
-
整体流程
-
<!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>Document</title> <style> #tip{ font-size: 15px; color: black; display: none; } </style> </head> <body> <input type="text" id="ipt"> <p id="tip">请输入固话号码</p> <script> // 给dom对象添加事件的语法:dom.事件名 = 事件处理函数 // 事件处理函数:事件触发的时候会执行的函数 var ipt = document.getElementById("ipt") var tip = document.getElementById("tip") // 获取焦点 // handler:处理 // handlerFocus:处理聚焦事件 function handlerFocus(){ // console.log("输入框获取焦点") tip.style.display = "block" } ipt.onfocus = handlerFocus // 失去焦点 function handlerBlur(){ // 隐藏提示 tip.style.display = "none" // 判定用户输入内容是否符合规则 // - 1. 编写固话规则正则 var reg_telephone = /^(0\d{2,3}-)?\d{7,8}$/; // - 2. 判定用户输入的内容是否符合正则规则 // - 获取用户输入的内容需要使用 dom.value 进行获取 if(reg_telephone.test(ipt.value)){ // 执行这里的代码表示用户输入内容正确 // - 提示方式:让输入框的边框颜色变成绿色 ipt.style.borderColor = "green" }else{ // 执行这里的代码表示用户输入内容错误 // - 提示方式:让输入框的边框颜色变成红色 ipt.style.borderColor = "red" } } ipt.onblur = handlerBlur </script> </body> </html>
-
-