1. BOM的本地存储(localStorage和sessionStorage)
-
localStorage特点:
- 浏览器本地存储类型,持久存储,一旦存储永久存在
- 只能存储基本数据类型(一般是字符串类型),其他数据类型要转成字符串类型存储
- 能够跨页面通讯:在A页面存储的本地信息可以在B页面中获取到
-
localStorage的语法:
- 创建一个本地存储:
var str = 'a, b, c, d' window.localStorage.setItem('str', str) // 此时含义是创建一个本地存储名字叫做str,调用变量str内的值给它当做它的值 window.localStorage.setItem('str1', 'str') // 此时含义是创建一个本地存储名字为str1,它的值是字符串str- 删除一个本地存储信息:
var str = 'a, b, c, d' window.localStorage.setItem('str', str) // 此时含义是创建一个本地存储名字叫做str,调用变量str内的值给它当做它的值 window.localStorage.removeItem('str') // 此时含义是删除一个本地存储变量名为字符串str的存储信息- 清空本地存储:
var str = 'a, b, c, d' window.localStorage.setItem('str', str) // 此时含义是创建一个本地存储名字叫做str,调用变量str内的值给它当做它的值 window.localStorage.setItem('str1', 'str') // 此时含义是创建一个本地存储名字为str1,它的值是字符串str window.localStorage.clear() // 此时含义是将本地存储的所有信息都清除- 查询本地存储信息:
var str = 'a, b, c, d' window.localStorage.setItem('str', str) // 此时含义是创建一个本地存储名字叫做str,调用变量str内的值给它当做它的值 var a = window.localStorage.getItem('str') // 此时含义是定义一个变量a去接收key叫做'str'的value,有的话返回值是它的value,没有的话返回null- 存储引用数据类型:
var obj = { name : 'zhangsan', age: 18 } obj = JSON.stringify(obj) // 此时这个JSON会将对象数据类型转换成字符串类就可以存储了 obj = JSON.prase(obj) // 此时这个JSON会将字符串类型转换成他原本的类型 -
sessionStorage与localStorage的区别:
* 浏览器的本地存储:临时存储,关闭浏览器后存储内容消失
* 如果是想要跨页面通讯必须是从本页面打开的才可以
* 功能:增,删,清除,获取和localStorage一样,语法也差不多
2. 本地存储的cookie
-
注意事项:
-
只能存储字符串,并且有固定的格式为:key = value 或 a = 100, 这种格式
-
存储大小有限制,4KB左右
-
操作cookie必须依赖服务器(本地启动文件不能运行cookie,可以借助Live Serve插件)
-
跟随前后端交互,自动携带:前端向后端发送请求时,如果cookie有数据会自动携带
-
前后端操作差别:前端只有JS可以操作cookie,后端任何一个语言都可以操作cookie
-
存储依赖域名:哪一个域名存储,哪一个域名可以用,不能跨页面通讯
-
-
cookie的一些操作:
- 设置一个cookie:
document.cookie = 'qq = 12345' // 此时这个代码含义是设置一个内容为qq = 12345字符串的cookie- 获取cookie:
document.cookie = 'qq = 12345' // 此时这个代码含义是设置一个内容为qq = 12345字符串的cookie console.log(document.cookie) // 这个代码含义是获取一个cookie中的内容-
cookie的有效期 默认是会话级别(浏览器关闭,自动删除)可手动添加一个过期时间
-
设置一条有过期时间的cookie
document.cookie = 'qq = 12345;expires ='+ timer- 设置一条30s后过期的cookie
var timer = new Date() timer.setTime(timer.getTime() + 30 * 1000 - 8 * 3600 * 1000) // 东八区 document.cookie = 'qq = 12345; expires =' + timer- cookie的有效期: 设置时间的时候是按照世界时间来的,中国为东八区多以需要把时间轴的时间往前调整八小时
3. cookie和storage的区别:
-
出现时间: * cookie:有JS时就存在了 * storage:H5出现后才存在
-
存储大小: * cookie:4kb左右 * storage:20MB/5MB
-
前后端交互: * cookie:请求时自动携带 * storage:请求时不会自动携带,可以手动携带
-
前后端操作: * cookie:前后端都可以操作 * storage:只有前端的JS可以操作
-
过期时间: * cookie:会话级别,可以手动设置过期时间 * storage:不能手动设置过期时间
-
两个storage的区别: * 过期时间: localStorage:永久存储 sessionStorage:临时存储
* 跨页面通讯:
localStorage:直接跨页面通讯
sessionStorage:只能从当前窗口跳转过的页面才能通讯
* 共同点:
只能存储字符串,不能存储复杂数据类型
直接存储其它数据类型,获取回来时字符串类型
4.DOM:
-
定义:文档对象模型,其实就是一些操作HTML的能力
-
核心:DOM的核心就是document
-
document对象是浏览器内置的一个对象,里面存储的是用来操作元素的各种方法
-
获取页面中的元素(非常规元素)
* html
```js
var htmlEle = document.documentElement
console.log(htmlEle)
```
* body
```js
var bodyEle = document.body
console.log(bodyEle)
```
* head
```js
var headEle = document.head
console.log(headEle)
```
5. 获取页面中的常规元素:
* 通过元素的ID名获取元素
```js
var id = document.documentById('Id名')
```
* 通过元素的class名获取元素
```js
var cla = document.documentsByClassName('class名') // 打印的是伪数组但是可以通过小标获取其中的DOM节点
```
* 通过元素的标签名获取元素
```js
var tag = document.documentsByTagName('标签名') // 打印的是伪数组形式标签
```
* 类似css选择器获取标签
```js
var a = document.querySelector('css中的写法') // 取第一个符合条件的标签
```
* 所有的标签
```js
var b = document.querySelectorAll('css中写法')
var arr = [...b] // 可以将伪数组变成真数组,伪数组不能用数组常用方法只能用forEach但是不推荐使用
```
6. 操作元素的属性
-
获取到DOM节点后可以直接操作节点属性并且渲染到页面中
-
.innerHTML可以获取到标签的内部结构
节点.innerHTML = '<span>我是内部的结构</span>' // 可以修改节点内部结构设置时会解析字符串内的HTML标签
- .innerText可以获取到标签内部文本
节点.innerText = '我是标签内部文本' // 可以将标签内部文本修改为此文本不识别标签
- 获取元素的某个属性(自定义属性也可以)自定义:自己写的不是提供的语法
节点.getAttribute('某个属性') // 获取节点的某个属性对应的值
- 设置元素的某个属性
节点.setAttribute('某个属性名', 属性值) // 新增的属性若与原属性属性名会覆盖原属性
- 删除元素的某个属性
节点.removeAttribute('属性名')
- H5自定义属性
* 属性是data - 后边的内容如果H5自定义属性为data - id = 'QF001'那么属性名是id, 属性值是'QF001',data作用是仅表示这是一个H5自定义属性
* 增加
节点.dataset.属性名 = '属性值'
* 删除
delete 节点.dataset.属性名
* 获取
console.log(节点.dataset) // 获取一个类似于对象的东西
console.log(节点.dataset.属性) // 获取属性值
* style
专门给某个元素加css样式的,添加的是行内样式
节点.style.属性 = 属性值
JS中写css样式 - 不要,要用驼峰命名法
* className
专门操作元素类名
节点.className // 获取元素类名
节点.className = '新类名' , 缺点:会直接覆盖原类名不管有几个
* classList
可以获取多个类名
节点.classList.add('类名') // 添加类名
节点.classList.remove('类名') // 删除雷鸣
* 对象名.属性 = 属性值 // 给对象属性赋值
* 节点.属性 = 属性值 // 给节点属性赋值