目录
1.9 console.log与console.dir使用区别 5
2.1 document.querySelector(“选择器”) 6
2.2 document.querySelectorAll(“选择器”) 6
3 innerHTML和innerText【获取双标签内容】 6
21 冒泡容易导致事件影响到父元素,需要阻止事件冒泡,把事件控制在当前元素内。 14
25获取事件对象被卷去的大小scroll【元素自己的滚动条卷去自己内容的长度】 15
28 getBoundingClientRect()方法 16
33 M端事件:移动端独特的事件,可以响应用户手指(或触控笔)对屏幕或者控制板操作 19
38.4 本地存储localStorage【增删改查的键值对都要用引号包裹】 21
1 Dom
1.2 什么是DOM
DOM(Document Object Model—文档对象模型)是用来呈现以及与任意HTML或XML文档交互的API
白话文:DOM是浏览器提供的一套专门用来操作网页内容的功能
DOM作用:开发网页内推特效和实现用户交互
1.3 DOM树是什么
将HTML文档以树状结构直观的表现出来,我们称之为文档数或DOM树
1.4 DOM对象
DOM对象:浏览器根据html标签生成的JS对象【所有的标签属性都可以在这个对象上面找到;修改这个对象的属性会自动映射到标签身上】
1.5 DOM树是什么
将HTML文档以树状结构直观的表现出来,我们称之为文档树或DOM树
作用:文档树直观的体现了标签与标签之间的关系
1.6 DOM对象怎么创建的
浏览器根据html标签生成的js对象(DOM对象)
DOM的核心就是把内容当对象来处理
1.7 document是什么
是DOM里面提供的一个对象
网页所有内容都在document里面
1.8 页面渲染的过程
读取:浏览器加载页面,代码从硬盘读取到内容
解析:将内存中的代码解析成DOM树
渲染:浏览器渲染引擎渲染DOM树,呈现页面
1.9 console.log与console.dir使用区别
当打印普通对象时,效果一样
当打印元素对象时,console.log打印的是标签元素
console.dir打印的是元素的属性和方法
2 获取元素
2.1 document.querySelector(“选择器”)
获取第一个选择器选中的元素
2.2 document.querySelectorAll(“选择器”)
选中所有满足选择器选中的元素,返回值为一个数组
2.3 获取body元素
document.body
3 innerHTML和innerText【获取双标签内容】
3.1 innerText
无法解析字符串中的标签
语法 | 描述 |
目标单个元素.innerText | 获取目标单个元素下面的所有子孙元素的文本内容【获取文本】 |
目标单个元素.innerText=新标签结构【文本内容】 | 新标签结构整体会当文本处理,渲染到目标单个元素的内部,所以不会解析标签 |
3.2 inner HTML
可以解析字符串中的标签
语法 | 描述 |
目标单个元素.innerHTML | 获取目标单个元素下面的所有子孙元素及其内容【获取文本+标签】 |
目标单个元素.innerHTML=新标签结构 | 新标签结构会解析到网页上,标签解析后不会出现在页面上 |
4 元素获取属性
单个元素.属性名
5 修改元素属性的属性值
单个元素.属性名 = 新属性值
6 表单元素
6.1 获取表单内容
语法 | 描述 |
单个表单元素.value | 获取input表单元素的内容【因为他是单标签】 |
6.2 表单状态:true、false
下面语法中,dom为我们获取过来的单个表单元素。
语法 | 描述 |
dom.disabled | 获取表单元素的禁用状态,返回值为true或false【默认值为false,没有禁用】【需要禁用js设置dom.disabled=true】 |
dom.checked | 获取表单元素【单选框或多选框】的选中状态,返回值为true或false【默认值为false,没有选中】【单选框或多选框需要选中的加个checked属性就好】 |
dom.selected | 获取下拉框的选中项状态,返回值为true或false【select下拉框的option选项需要选中的加个selected属性】 |
7 自定义属性
7.1 h5自定义属性使用
步骤 | 描述 |
1 | 给目标标签元素dom设置 data-自定义属性名=自定义属性值 |
2 | 在js代码的目标标签dom中使用dom.dataset.自定义属性名 来获取我们的自定义属性对应的属性值【dom.getAttribute(“data-自定义属性名”)】 |
3 | 修改自定义属性名直接使用dom.dataset.自定义属性名 = 修改值 |
7.2 自定义属性使用
步骤 | 描述 |
1 | 给目标标签元素dom设置 data-自定义属性名=自定义属性值 |
2 | 获取自定义属性使用dom.getAttribute(“data-自定义属性名”) |
3 | 设置自定义属性dom.setAttribute(‘属性’,’值’);【dom.属性=“值”】 |
4 | 移除属性dom.removeAttribute(“属性”) |
8 js修改元素样式
8.1 修改元素单个样式
语法 | 描述 |
dom.style.css样式属性=样式属性对应的样式属性值 | css样式属性采用小驼峰命名, |
8.2 修改元素多个css样式
语法 | 描述 |
dom.style.cssText=”css样式” | 一次性修改mubiao 元素的多个css样式,各个样式之间用分号隔开,写法和css代码完全一致 |
8.3 修改元素类名
语法 | 描述 |
dom.classname=”类名或多类名” | classname属性直接赋值会修改原来的类名为新类名。所以想要保留原来类名的样式,可以使用多类名的方式赋值。想不需要原来的样式,类名中不使用原来的类名就可以达成目的。 |
8.4 通过classList属性添加类名的方式
通过classList属性可以获取到元素的所有类名这个伪数组
语法 | 描述 |
dom.classList.add(‘目标类名’) | 给元素添加目标类名 |
9 classList使用
获取元素的所有类名【是一个伪数组】
9.1 添加类名
语法 | 描述 |
dom.classList.add(‘目标类名’) | 将目标类名添加到元素dom的类名中 |
9.2 移除类名
语法 | 描述 |
dom.classList.remove(‘目标类名’) | 将目标类名从元素dom的类名中移除 |
应用 | 描述 |
if(dom.classList.contains(‘目标类名’){ dom.classList.remove(‘目标类名’) } | 有目标类名就移除该类名 |
if(dom){ dom.classList.remove(‘目标类名’) } | 根据目标类名获取元素dom,获取到dom就给dom移除掉该类名。 |
9.3 切换类名
语法 | 描述 |
dom.classList.toggle(‘目标类名’) | 先判断元素有没有目标类名,有目标类名就将目标类名删掉,没有就将目标类名添加到元素身上。 |
9.4 判断类名
语法 | 描述 |
dom.classList.contains (‘目标类名’) | 判断元素是否有目标类名,有类名返回值为true,没有类名返回值为false |
10 定时器
10.1 打开定时器
语法 | 描述 |
let 定时器变量=setInterval(function(){ //函数体 },间隔时间) | 在间隔时间后执行定时器内的函数体,定时器的返回值为数字【多个定时器同时出现时,根据书写代码的定时器顺序依次给定时器编号,定时器返回值为对应的编号】 |
10.2 清除定时器
语法 | 描述 |
clearInterval(定时器变量) | 清除定时器变量保存的编号对应的定时器。【停止定时器】 |
11 事件
网页交互:什么元素 在什么时候 做什么事情
事件:实现网页交互的过程
事件监听:给元素添加事件【事件源.addeventListener(‘事件类型’,事件处理函数)】
监听事件时不会执行处理函数,需要事件类型触发时才会执行
事件源.事件类型()【可以直接调用事件源下面的对应事件类型处理函数,相当于该事件类型直接被触发】
11.1 事件三要素
要素 | 描述 |
事件源 | 什么元素 |
事件类型 | 什么时候执行 鼠标单击:click 鼠标双击:dblclick 鼠标移入:mouseenter 鼠标移出:mouseleave 鼠标移入:mouseover【有冒泡】 鼠标移出:mouseout【有冒泡】 |
事件处理函数 | 做什么事情 |
11.2 事件监听步骤:
步骤 | 描述 |
1 | 获取DOM元素,通过”addEventListener”方法为元素添加事件监听 |
2 | 等待事件触发 |
3 | 事件触发后,执行事件处理函数 |
11.3 事件解绑
传统事件解绑语法 | 描述 |
元素.onclick=null | 传统事件【元素.on事件类型】函数的解绑 |
元素.removeEventListener(‘事件类型’,事件函数名) | 元素.addEventListener(‘事件类型’,事件函数名)绑定的事件解绑 |
12 事件与定时器连用应用
应用 | 描述 |
//定义用来保存定时器编号的信号量 let timeID 单个元素.addEvenListener(‘事件类型’,function(){ //在开启定时器之前关闭之前的定时器 if(timeID){ clearInterval(timeID) } timeID=setInterval(function(){ //定时器执行函数体 }) }) | 保存定时器的返回值的信号量需要保存到全局,这样在开启每个定时器之前都可以提前关闭前面开启的定时器。这样其他元素也可以通过事件函数来关闭刚刚那个元素开启的定时器。 |
13 焦点事件
focus:获得焦点
blur:失去焦点
语法 | 描述 |
input表单元素.addEventListener(“focus”,function(){ //事件处理函数 }) | 当表单元素获取到焦点时执行事件处理函数 |
input表单元素.addEventListener(“blur”,function(){ //事件处理函数 }) | 当表单元素失去焦点时执行事件处理函数 |
14 键盘事件【表单元素内部】
keydowm:键盘按下事件
keyup:键盘弹起事件
input:文本框输入触发
语法 | 描述 |
目标表单元素.addEventListener(‘keydown’,function(){ //事件处理函数代码 }) | 在目标表单元素中当键盘按下时触发该事件函数。 |
目标表单元素.addEventListener(‘keyup’,function(){ //事件处理函数代码 }) | 在目标表单元素中当键盘弹起时触发该事件函数。 |
目标表单元素.addEventListener(‘input’,function(){ //事件处理函数代码 }) | 在目标表单元素中当目标元素输入单个字符时触发该事件函数。 |
15 事件对象e
事件对象e:事件发生后存储的相关信息
事件处理函数的第一个参数,在事件处理函数中表示事件对象。
事件对象属性 | 描述 |
e.target | 点击哪个元素,就返回哪个元素【事件源中鼠标点击的位置那个事件源中的最内层子元素】 |
e.currentTarget | 返回事件源【调用当前事件函数的事件源】 |
e.key | 获取键盘事件【keyup 和 keydown】的按下键盘的键上面对应的字符串 |
e.keyCode | 获取键盘事件【keyup 和 keydown】的按下键盘的键上面对应的字符串对应的ascall码 |
e.type | 返回事件类型 比如click mouseover 不带on |
e.preventDefault() | 该方法 阻止默认事件(默认行为)标准 比如不让链接跳转 让提交按钮不提交 |
e.stopPropagation() | 阻止冒泡 标准【阻止事件流的传播: 1.冒泡阶段: A.只会执行添加事件的对象 【即父元素的事件不会被触发】 B.父元素是冒泡阶段的可以继 续设置事件 2.捕获阶段: A.设置该方法后,子元素是捕 获阶段的将设置不了事件【设置事件无效】 】 |
16 环境对象
环境对象:指的是函数内部特殊的变量this,它代表当前函数运行时所处的环境
作用:让代码更简洁方便
判断this指向:函数的调用方式不同,this指代的对象也不同【谁调用,指向谁】【直接调用函数,this指向window】
在事件处理函数内部,需要使用当前元素进行处理时,能用this就用this
17 获取单选框或多选框表单元素被选中状态集合
语法 | 描述 |
document.querySelectorAll(“单选或复选框表单元素选择器:checked”) | 获取目标单选或复选框选择器选中的表单元素,且状态为选中的元素 |
18 全选取消全选案例
全选按钮获取过来的元素名为checkAll,获取过来的全选下面的所有表单单选元素选项为数组cks
案例 | 等价写法 |
If(checkAll.checked){ } |
19 事件流
事件的执行并不是简单的触动元素就执行它对应的事件,而是触发某个元素时,会牵涉到它的父子元素的相应事件
事件流:事件完整执行过程中的流动路径,包括三个阶段,冒泡过程应用广泛
实际工作都是使用事件冒泡为主
事件阶段 | 描述 |
捕获阶段 | 从父到子 |
目标阶段 | 真正触发事件的元素 |
冒泡阶段 | 从子到父【先执行子元素的事件,再一层一层往上执行父元素的事件】 |
19.1 捕获阶段
事件捕获:当触发子元素事件时,从最顶级父元素,一级一级往里,父元素“同名事件”会触发
执行规则:window->document->html->body->父元素->子元素【先执行父元素的事件处理函数,再一层一层往内执行子元素的事件处理函数。】
e.eventPhase阶段数值:1
默认情况下注册事件不显示捕获过程
19.2 事件目标
e.eventPhase阶段数值:2
19.3 冒泡阶段
e.eventPhase阶段数值:3
20 事件委托
把子元素要做的事件【事件类型】委托给父元素处理,子元素不需要注册事件【子元素需要设置样式时,只需通过e.target就可以获取子元素。】,父元素注册一次事件即可。
事件委托的应用:给动态新增元素注册事件
案例 |
const ul = document.querySelector("#ul"); const lis = document.querySelectorAll(".li"); ul.addEventListener("click", function () { event.target.style.backgroundColor = "pink"; }); |
21 冒泡容易导致事件影响到父元素,需要阻止事件冒泡,把事件控制在当前元素内。
语法 | 描述 |
事件对象.stopPropagation() | 阻止事件冒泡 |
22 阻止事件源的默认行为
语法 | 描述 |
事件对象.preventDefault() | 阻止事件源的默认行为【a事件源的默认跳转功能、】 |
23 鼠标滚动事件
语法 | 描述 |
元素名.addEventListener(‘scroll’,function(e){ //事件处理函数体 }) | 当在目标元素中且目标元素有滚动条时,滚动鼠标滚轮时触发该事件处理函数 |
24 页面尺寸事件【调用者为window】
语法 | 描述 |
window.addEventListener(‘resize’,function(){ //事件处理函数体 }) | 当浏览器窗口发生变化时触发该事件 |
25获取事件对象被卷去的大小scroll【元素自己的滚动条卷去自己内容的长度】
可读写
语法 | 描述 |
元素名.scrollWidth | 目标元素实际内容区域宽度 |
元素名.scrollHeight | 目标元素实际内容区域高度【包括超出部分被隐藏的区域】 |
元素名.scrollTop | 获取元素自己滚动条向上滚动的距离 |
元素名.scrollLeft | 获取元素自己滚动条向左滚动的距离 |
26 offset家族
只读属性
语法 | 描述 |
元素.offsetWidth | 获取元素的盒模型宽度 |
元素.offsetHeight | 获取元素的盒模型高度 |
元素.offsetLeft | 获取元素距离最近定位父元素的左实际距离 |
元素.offsetTop | 获取元素距离最近定位父元素的上实际距离 |
27 client家族
语法 | 描述 |
元素.clientWidth | 元素可见部分宽 |
元素.clientHeight | 元素可见部分高 |
clientLeft | 可见部分位置【左边框宽度】 |
clientTop | 可见部分位置【上边框宽度】 |
28 getBoundingClientRect()方法
语法 | 描述 |
元素名.getBoundingClientRect() | 返回值为一个对象 对象里面有height属性,返回调用元素的内容高度 |
29 设置滚动距离
语法 | 描述 |
滚动元素.scrollTo(x,y) | 设置元素滚动距离 |
30 导航条电梯设置
31 时间戳
let d =new Date()
属性方法 | 描述 |
d.getFullYear() | 获取当前时间的年份 |
d.getMonth() | 获取当前时间的月份-1 |
d.getDate() | 获取当前时间的几号 |
d.getDay() | 获取当前时间的周几 |
d.getHours() | 获取当前时间的小时数 |
d.getMinutes() | 获取当前时间的分钟数 |
d.getSeconds() | 获取当前时间的秒数 |
d.getTime() | 获取当前时间的时间戳 |
d.toLocaleString() | 日期格式化年月日时分秒【2022/8/12 09:58:04】 |
d.toLocaleDateString() | 日期格式化年月日【2022/8/12】 |
31.1 时间戳
d为上面创建的时间日期对象
获取当下时间毫秒数 | 描述 |
d.getTime() | 获取当下时间毫秒数 |
new Date().getTime() | 获取当下时间毫秒数 |
+new Date() | 获取当下时间毫秒数 |
Date.now() | 获取当下时间毫秒数 |
获取未来时间毫秒数 | 描述 |
+new Date(‘未来日期化格式’) | 获取未来时间毫秒数 |
32 DOM节点
DOM节点:DOM树里面每一个内容都称之为节点
32.1 节点类型
节点类型 | 描述 |
元素节点 | 所有的标签+属性+内容 |
属性节点 | 所有的属性 |
文本节点 | 所有的文本 |
其他 |
32.2 父节点
返回当前DOM元素的父元素【父元素:所有标签加所有内容】
只读属性
语法 | 描述 |
dom对象.parenrNode | 返回值为最近一级的父节点,找不到返回null 也可以表示获取dom元素对象的父元素 |
32.3 子节点
元素的所有子内容,包括子标签、文本节点
语法 | 描述 |
dom对象.children | 返回值为dom对象元素里所有子元素组成的伪数组【通过伪数组的下标可以获取目标子元素】 |
32.3 兄弟节点
语法 | 描述 |
dom对象.previousElementSibling | 返回值为dom对象元素上一个兄弟元素 |
dom对象.nextElementSibling | 返回值为dom对象元素下一个兄弟元素 |
32.4 增加节点
使用js给页面添加元素
32.5 创建节点
语法 | 描述 |
document.createElement(‘元素标签名’) | 创建标签名的元素标签 |
32.6 克隆节点【另一种创建节点的方式】
语法 | 描述 |
克隆元素.cloneNode(true) | 返回值为获取的克隆元素,包含后代节点 |
克隆元素.cloneNode(false) | 返回值为获取的克隆元素,不包含后代节点 |
克隆元素.cloneNode() | 返回值为获取的克隆元素,不包含后代节点 |
32.7 追加节点
将节点追加到页面上称为DOM元素,渲染到页面上
使用场景:使用js给页面添加元素
同一个元素对象,当它追加给目标元素当子元素时,目标元素只能追加一次,其以最后一次为主。
语法 | 描述 |
dom对象.appendChild(追加的元素) | 作为dom元素的最后一个子元素 |
dom对象.insertBefore(追加的元素,DOM2) | 作为dom元素的子元素位置在DOM2的前面 |
32.8 删除节点
语法 | 描述 |
dom对象.removeChild(要删除的子元素对象) | 在JavaScript原生dom操作中,要删除原生必须通过父元素删除 如不存在父子关系删除不成功 删除节点与隐藏节点(display:none)区别:隐藏节点是看不见但仍然存在,删除时html中不再有此节点。 |
33 M端事件:移动端独特的事件,可以响应用户手指(或触控笔)对屏幕或者控制板操作
事件类型 | 描述 |
touchstart | 触摸DOM元素时触发 |
touchmove | DOM元素上滑动时触发 |
touchend | 结束触摸DOM元素时触发 |
34 重绘和回流【重排】
34.1 重绘
由于节点【元素】的样式的改变并不影响它再文档流中的位置和文档布局时,则是重绘。
Css样式发生改变【重绘不一定有重排】
34.2 回流【重排】
元素的尺寸、结构、布局等发生改变时,浏览器就会重新渲染部分或全部文档的过程称为回流
html结构发生改变【回流一定会有重绘:结构改变了一定会重新绘制页面】
35 DOM和BOM区别
let定义在全局作用域中的变量、函数都会变为window对象的属性和方法
window对象下的属性和方法调用的时候可以省略window
DOM | BOM |
文档对象模型 | 浏览器对象模型 |
将文档当作一个对象看待 | 将浏览器当作一个对象看待 |
顶级对象是document | 顶级对象是window |
主要学习的是操作页面元素 | 学习的是浏览器窗口交互的一些对象 |
36 延时器
36.1 延时器语法
语法 | 描述 |
let timer = setTimeout(回调函数,间隔时间) | 间隔多少时间后执行该回调函数 |
36.2 清除延时器
语法 | 描述 |
clearTimeout(timer) | 清除延时器,延时器只会执行一次,一般不用 |
37 js执行机制【单线程】
单线程:同一时间只能做一件事,多个任务时需要排队让线程依次执行,前一个任务结束,才会执行后一个任务
假设多线程,一个线程添加DOM元素,另一个线程删除元素,两个操作对立无法定义结果
37.1 为什么是单线程:
Js主要功能是处理用户交互及操作DOM
38 本地存储
38.1 location对象
语法 | 描述 |
location | |
location.href | 获取地址栏完整数据 |
location.search | 获取地址栏?和后面的字符组成的字符串 |
location.hash | 获取地址栏#和后面的字符组成的字符串 |
location.reload() | 刷新页面 |
38.2 navigator对象
记录着浏览器自身相关信息
属性 | 描述 |
navigator.userAgent | |
38.3 history
记录着浏览器的历史记录
属性 | 描述 |
history.back() | 后退一步【一般用于某个按键的事件触发,后退到上一个页面】 |
history.go(-1) | 后退一步【一般用于某个按键的事件触发,后退到上一个页面】 |
history.forward() | 前进一步【一般用于某个按钮,回到前面去过的页面】【点了后退按钮之后,才可以点击前进按钮】 |
history.go(1) | 前进一步【一般用于某个按钮,回到前面去过的页面】 |
38.4 本地存储localStorage【增删改查的键值对都要用引号包裹】
一种web存储方式,将数据存储到浏览器,浏览器窗口关闭后数据不会丢失
具体条件:在相同协议、主机名、端口下就能读取/修改到同一份localStorage数据,默认大小为5M左右
本地存储只能存储字符串类型数据【本地存储时,费字符串类型会自动转为字符串】
在控制台的application下的Storage模块的Local Storage 下的file://
语法 | 描述 |
localStorage.setItem(“键”,”值”) | 存数据【值只能是字符串、数字、数组】【存对象需要先将对象转为字符串才可以存】 |
localStorage.getItem(‘键’) | 取数据【没有则返回空null】 |
localStorage.setItem(‘键’,’新值’) | 改数据 |
localstorage.removeItem(‘键’) | 删数据 |
38.5 字符串和对象之间的转换
语法 | 描述 |
JSON.stringify(对象名) | 将参数对象转换为字符串 |
JSON.parse(JSON字符串) | 将参数字符串转为对象【这个字符串中必须是对象的严格模式,即属性必须加双引号】 |
39 本地存储保存用户数据
39.1当数据是数组保存的对象时
假设我们定义data数组变量保存我们的对象数据,每次点击事件就会将用户输入的数据保存到对象中,将对象数据存入data数组变量中。tbody元素内部用于渲染我们追加的元素
步骤 | 描述 | 代码描述 |
1 | 一进页面就将本地存储的数据赋值给data数据,本地存储没有数据就将空数组[]赋值给data | const data=JSON.parse(localStorage.getItem("arr")) || [] |
2 | 封装一个渲染数组中数据的函数【方式一】【根据数据实时渲染页面的函数,需要每次清除原先已经渲染过的数据,所以第一行有tbody.innerHTML=’’这一行代码】 | function render(data) { tbody.innerHTML=’’ for (let i = 0; i < data.length; i++) { const tr =document.createElement("tr"); tr.innerHTML = ` <td>${i}</td> <td>${data[i].uid}</td> <td>${data[i].uname}</td> <td>${data[i].age}</td> <td>${data[i].gender}</td> <td>${data[i].salary}</td> <td>${data[i].city}</td> <td> <a href="javascript:">删除</a> </td>`; tbody.appendChild(tr); } } |
2 | 封装一个渲染数组中数据的函数【方式二】【根据数据实时渲染页面的函数,需要每次清除原先已经渲染过的数据,所以第一行有tbody.innerHTML=’’这一行代码】 | function render(data) { tbody.innerHTML=’’ for (let i = 0; i < data.length; i++) { let str = ""; const tr = document.createElement("tr"); for (let key in data[i]) { str += `<td>${data[i][key]}</td>`; } str += `<td> <a href="javascript:">删除</a> </td>`; tr.innerHTML = str; tbody.appendChild(tr); } } |
3 | 一进页面就将本地存储的数据渲染到页面上 | render(data) |
4 | 每次更新数据后将数据更新到本地存储 | data.push(obj); localStorage.setItem("arr", JSON.stringify(data)); |
39 表单元素数据交互参数
表单元素的地址栏的参数是通过name属性的属性值来的,这个属性值保存着自己这个表单元素的value值。
form表单元素阻止默认提交功能后内部的普通元素的click点击事件会失效,只有当form表单元素数据提交后,它内部的普通元素的click点击事件才会重新生效。
data为存放对象的数组,obj为存放用户输入的表单数据组,form为表单元素
用法 | 描述 |
//获取所有有name属性的表单元素且在form表单元素的子代 const items=document.querySelectorAll("form [name]"); | 即获取所有用户输入了数据的表单元素 |
form.addEventListener(“submit”,function (e) { e.preventDefault() }) | 表单事件的第一件事就是阻止表单表单的默认行为【如点击提交按钮就会地址跳转】 |
//items[i]为需要输入的每个表单元素 //items[i].name为接收表单元素输入的值【元素的name属性值为地址栏需要接收输入值的属性】 for (let i = 0; i < items.length; i++) { obj[items[i].name] = items[i].value; } | //将元素name属性值作为对象中存储的一个属性,而该属性对应的值就为用户输入的数据 |
//数据发生改变就需要立即存放到本地存储中 data.push(obj); localStorage.setItem("arr", JSON.stringify(data)); | //将这组对象数据存入data数组中 //将数据存入本地localStorage |
目标表单form元素.reset() | //清空表单内容,常用于提交按钮点击后 |
40 新增元素id递增方式
data为保存对象数据的数组,uid为每个对象唯一id
案例 | 描述 |
if (data.length == 0) { obj.uid = 1; } else { obj.uid = data[data.length-1].uid+1; } | 当点击提交按钮时,会先判断data中有无数据,没有数据就初始化对象的uid为1,否则就将最后一个数据的uid加1的值给到最新数据 |
41 正则表达式
用于匹配字符串中字符组合的模式
RegExp简单说:检测字符串是否为需要的格式,得到结果,提取内容或者替换内容。在JS中,正则表达式也是对象,许多语言都支持正则表达式。
41.1 使用场景
表单验证【匹配】 |
过滤敏感词【替换 】 |
字符串中提取需要的部分【提取】 |
41.2 创建正则表达式
语法 | 描述 |
var 变量名 = new RegExp(/表达式/) | 构造函数创建正则 |
var 变量名 = new RegExp(参数1,参数2) | 参数1为正则的规则 参数2为正则表达式修饰符【参数为字符串】 |
var 变量名 = /表达式/修饰符 | 字面量创建正则 |
41.3 正则表达式修饰符
“i”:表示不区分大小写ignoreCase “g”:表示全局匹配global “m”:表示换行匹配multiline |
41.4 预定义字符类
字符类的一些常见模式的简写方式
符号 | 描述 |
\d | 匹配0-9之间任一数字,相当于[0-9] |
\D | 匹配0-9以外的任一字符,相当于[^0-9] |
\w | 匹配任一字母,数字,下划线,相当于[a-zA-Z0-9] |
\W | 匹配所有字母,数字,下划线以外的字符,相当于[^a-zA-Z0-9] |
\s | 匹配空格【包括换行符,制表符,空格符等】,相当于[\r\n\t\v\f] |
\S | 匹配任一非空格字符,相当于[^\r\n\t\v\f] |
41.5 可以用正则为参数的字符串方法
保存字符串的变量str,定义正则的变量为reg
语法 | 描述 |
str.replace(reg,’替换文本’) | 在字符串str中找是否有满足正则的字符,有就替换为替换文本 |
42 calc函数
用于动态计算长度值,值灵活
css3新增功能
任何长度值都可以使用calc()函数进行计算;
calc()函数支持 “+”, “-”, “*”, “/” 运算;
calc()函数使用标准的数学运算优先级规则;
运算符前后都需要保留一个空格
语法 | 描述 |
选择器{ width: calc(100vw - 200px); } | 选中元素的宽度为屏幕宽度减去200px后剩下的值。 |