cookie 与 storage 的区别?认识h5的自定义属性

149 阅读4分钟

cookie

1. cookie 只能在用服务器启动的页面中正常使用

语法: document.cookie = 'key=value'

设置一条 cookie
document.cookie = 'QQ=123456789'

设置多条 cookie
document.cookie = 'QQ=123456789'
document.cookie = 'password=987654321'

设置一条带有过期时间的 cookie

不管你设置的是那个时区的时间(我们是东八区),它都会按照世界标准时间去设置

如果我们想要设置一个过期时间的话, 需要先往后调整8小时; 然后加上你需要的过期时间
比如: 我需要设置一条 30秒后过期的 cookie
    1. 获取当前时间
    2. 将当前时间往后调整 8 小时
    3. 把调整后的时间 加上我们设置的过期时间

// 1.获取当前时间
var timer = new Date()

//将当前时间往后调整 8 小时,把调整后的时间 加上我们设置的过期时间
timer.setTime(timer.getTime() - 1000 * 60 * 60 * 8 + 1000 * 30)
document.cookie = 'VX=6666;expires=' + timer

cookie 与 storage 的区别?

1.出现时间
    cookie:  JS 的时候就有了
    storage:  H5 以后才有的
2.存储大小
    cookie: 4kb
    storage: 20MB
3.前后端交互(前端向后端发送请求)
    cookie: 交互时请求默认携带 cookie
    storage: 交互式请求不会携带, 除非前端人员配置传递
4.前后端操作
    cookie: 不管前后端语言都可以操作
    storage: 只能有前端语言来操作   (JS)
5.过期时间:
    cookie: 默认会话级, 页面关闭, 存储消失; 可以通过手动配置
    storage: 不能通过手动配置

localStorage 与 sessionStorage 的区别?

过期时间:
    localStorage: 永久存储, 除非手动清理
    sessionStorage: 会话级别, 关闭页面, 存储就失效

认识DOM

对页面删除一个节点
      增加一个节点
对某一个节点添加一个 class 类名
    删除某一个节点的类名

获取非常规 DOM(HTML head body)

1.1 HTML语法: document.documentElement
    var htmlEle = document.documentElement

1.2 head 语法: document.head
    var headEle = document.head

1.3 body 语法: document.body
    var bodyEle = document.body

获取常规 DOM

JS在获取常规元素时与CSS一样, 可以通过类名,标签名,ID名

1.1 通过类名去获取标签
    <div class="box" id="box2">我是具有 class 的box1</div>

    var Box = document.getElementsByClassName('box')

    Box 是一个伪数组, 想要获取到某一个元素, 可以通过下标
    伪数组: 长得和数组类似, 有下标有length, 但是没有数组的常用方法

    不管页面具有这个 类名的 元素 有多少个, 获取到的永远是 伪数组的形式

1.2 通过 标签名 去获取标签
    var oDiv = document.getElementsByTagName('div')[0]

    oDiv 也是一个伪数组, 想要获取到某一个元素, 可以通过下标

1.3 通过 ID名 去获取标签
    var oBox2 = document.getElementById('box2')

    因为 ID 通常都是独一无二的
    所以 这里获取到的就是一个具有 box2 ID 名的标签, 而不是一个伪数组

2.1 按照选择器的形式 获取标签满足条件的第一个
    var myDiv = document.querySelector('.box')

    querySelector: 获取到满足条件的 第一个标签

2.2 按照选择器的形式 后去所有满足条件的标签
    var myDivAll = document.querySelectorAll('.box')

    querySelectorAll: 获取到满足条件的 所有标签

innerHTML 和 innerText

innerHTML
    获取到标签内部的文本与 HTML 结构

    赋值时 会识别 字符串中的 html结构

    如果有实际的标签, 会把它当成标签渲染到页面上

innerText
    只会获取到页面结构的文本内容, HTML结构会被忽略掉

    赋值时 不会识别 字符串中的 html 结构

    如果有实际的标签, 会把它当成 字符串 渲染到页面上

获取元素的某些属性

<div class="box" a="100" b="200">我是一个具有很多属性的 DIV 标签</div>

1. 获取元素
    var oBox = document.getElementsByClassName('box')[0]

    console.log(oBox)

2. 获取元素的某些属性
    // 语法: 元素.getAttribute('要查询的属性名')

    console.log(oBox.getAttribute('class'))
    console.log(oBox.getAttribute('a'))

3. 设置元素的某些属性
    // 语法: 元素.setAttribute('要设置的属性名', '要设置的属性值')

    oBox.setAttribute('a', 'qwer')
    oBox.setAttribute('b', 'asdf')
    oBox.setAttribute('qqq', 'qqqq123123')

4. 移出元素的某个属性
    // 语法: 元素.removeAttribute('要移除的属性名')

    oBox.removeAttribute('b')

h5的自定义属性

data-cs="123456789"
    H5 自定义属性中 data-   是固定的

    cs 是我实际的 属性名

    "123456789" 是我实际的 属性值

<div qq="123" data-cs="123456789">H5新增自定义属性</div>

获取 H5 自定义属性
    // 1. 获取语法: 元素.dataset.属性名

    console.log(oDiv.dataset.cs)

    // 2. 设置语法

    oDiv.dataset.cs = 'qwe'         // 标签中实际拥有; 做修改操作
    oDiv.dataset.age = 18           // 标签中实际没有; 做新增操作

    // 3. 删除
    delete oDiv.dataset.age