笔记九、JavaScript——用 JS 去操作浏览器 和 页面中的 HTML 元素(BOM)

112 阅读6分钟

用 JS 去操作浏览器 和 页面中的 HTML 元素

1.认识BOM

  • 浏览器对象模型, 其实就是操作浏览器的一些能力
  • 我们可以操作那些内容?
    • 获取浏览器的相关信息(窗口大小)
    • 操作浏览器进行页面的跳转
    • 获取浏览器地址栏的信息
    • 操作浏览器的滚动条
    • 获取浏览器的版本
    • 让浏览器出现一个弹出框
    • ....
  • BOM 的核心就是 window 对象
    • window 是 JS 内置的一个对象, 里面包含着操作浏览器的方法 console.log(window)

2.体验BOM

  1. 获取浏览器窗口的尺寸 innerHeight / innerWidth
  • 作用: 获取浏览器窗口的高度和宽度(包含滚动条)
console.log('高度', window.innerHeight)
console.log('宽度', window.innerWidth)
  1. 浏览器的弹出层 (学习的时候会用, 实际工作中不会使用)
  • alert
  • prompt
  • confirm
    • 有一个询问信息和两个按钮
    • 点击确定按钮 返回 true
    • 点击取消按钮 返回 false
var boo = confirm('请问您确定进入页面吗?')
console.log(boo)
  1. 浏览器的地址信息 在 window 中, 有一个 对象 叫做 location, 他是专门用来存储浏览器地址栏内的信息
  • 1.1 location
  • 这个对象中, 有一个属性叫做 href
    • 这个属性是专门存储浏览器地址栏内的 url 地址的信息
    • 我们也可以给这个属性赋值, 这样就会跳转到我们赋值的地址了
  • 这个对象中, 有一个方法叫做 reload
    • 这个方法调用时会重新加载页面, 相当于 刷新
    • 注意!!! 不要直接写在代码中, 否则浏览器会一直刷新
// 1.1 location
tTimeout(function () {
    window.location.href = 'https://www.baidu.com/'
}, 3000)

// 1.2 reload
var count = 0
setInterval(function () {
count++
console.log(count)

if (count === 5) {
    window.location.reload()    // 不能直接写在 代码中
}
}, 1000)

  1. 浏览器的历史记录 window 对象中 有一个叫做 history 他专门用来存储历史记录信息

history.back

  • 专门用来回退历史记录, 就是回到前一个页面, 相当于浏览器左上角的 ← 按钮
  • 注意: 我们需要有上一条记录, 否则不能使用这个方法
  • 语法: window.history.back() history.forward
  • 是去到下一个历史记录里面, 也就是去到下一个页面, 相当于浏览器左上角的 → 按钮
  • 注意: 我们需要之前有过回退操作, 不然无法使用这个方法
  • 语法: window.history.forward()

3.BOM事件

  1. 浏览器的版本信息(了解)
  • window 中的 navigator 可以获取到浏览器的信息
  1. 浏览器的 onload 事件
  • 这个事件会在页面所有资源加载完毕后执行
window.onload = function () {
    我们的 JS 代码全部书写在这个函数内部
}
  • 在浏览器中, 把 JS 写在 head 中, 在 JS 加载时, 下边的 body标签还没来得及加载,可能会导致我们获取body内部的标签, 比如说 div 或者 img, 出现问题获取不到,如果把代码放在 onload 中, 则不会出现这个问题
  • 如果把 JS 写在 body 底部, 写不写 onload 都无所谓
  1. 浏览器的 onscroll 事件
  • 当浏览器的滚动条滚动时会触发该事件, 或者鼠标滚轮滚动时触发(前提是有滚动条)
  1. 浏览器的滚动距离
  • 浏览器的内容可以滚动, 那么我们就能获取到浏览器的滚动距离
  • 思考:浏览器真的滚动了吗?
    • 其实浏览器并没有滚动, 而是浏览器内部的页面在滚动,换句话说: 浏览器没动, 页面向上或者向下走了,所以这个不能单纯的说是浏览器的内容了, 而是页面的内容
    • 那么我们这里就不能再使用 window 对象, 而是使用 document 对象 scrollTop获取的是 页面向上滚动的距离
  • 语法1: document.body.scrollTop
  • 语法2: document.documentElement.scrollTop scrollLeft获取的是 页面 向左的滚动距离
  • 语法1: document.body.scrollLeft
  • 语法2: document.documentElement.scrollLeft 两种语法的区别
  1. IE 浏览器(了解)
  • 没有 DOCTYPE 声明的时候, 两种语法没有差别用哪个都无所谓
  1. Chorme 和 FireFox
  • 没有 DOCTYPE 声明的时候, 用 语法1 body
  • 有 DOCTYPE 声明的时候, 用 语法2 documentElement
  1. Safari
  • 这两个语法都不用, 使用一个单独的方法 window.pageYOffset
 window.onscroll = function () {
// console.log('body: ', document.body.scrollTop)
// console.log('documentElement: ', document.documentElement.scrollTop)


console.log('body: ', document.body.scrollLeft)
console.log('documentElement: ', document.documentElement.scrollLeft)
}

4.浏览器的本地存储(面试必问)

1. localStorage

  • 浏览器的本地存储, 持久存储, 一旦存储永久存在
  • 只能存基本数据类型(一般存储字符串), 不能存储其他数据类型
  • 可以跨页面通讯:两个页面得到了数据共享, 我们将这种情况叫做 跨页面通讯 2. sessionStorage
  • 浏览器的本地存储, 临时存储, 关闭浏览器以后, 存储内容自动消失
  • 想要跨页面通讯, 必须是本页面跳转的才可以 3. cookie
  1. 只能存储字符串, 并且有固定的格式
  • key=value;key2=value2
  1. 存储大小有限制 (大约是 4kb)
  2. 存储有时效性
  • 默认是会话级别失效, 但是可以手动设置过期时间
  1. 操作必须依赖服务器
  • 本地打开的页面不能操作 cookie
  • 要求页面必须在服务器打开
  1. 跟随前后端请求自动携带
  • 只要 cookie 空间中有内容时, 会在该页面和后端交互的过程中自动携带
  1. 前后端操作
  • 前端可以使用 JS 来操作 cookie
  • 任何一个后端语言都可以操作 cookie
  1. 存储依赖域名
  • 那一域名存储, 哪一个域名使用
  • 不能跨域名通讯
<h1>本地存储</h1>
<a href="./04_1_测试.html">点击跳转验证 sessionStorage</a>
// localStorage     (增   删一条  清空   查)
// 1. 增        
window.localStorage.setItem(key, value)
window.localStorage.setItem('qq1', 'QF001')
window.localStorage.setItem('qq2', '66666666')

// 2. 查        
window.localStorage.getItem(key)
var qq = window.localStorage.getItem('qq')
var pw = window.localStorage.getItem('password')  // 因为没有对应的 key, 所以获取到的值为 null
console.log(qq)

// 3. 删除一条   window.localStorage.removeItem(key)
window.localStorage.removeItem('qq1')

// 4. 清空
window.localStorage.clear()
// sessionStorage
// 1. 增        window.sessionStorage.setItem(key, value)
window.sessionStorage.setItem('wx1', 'QF001')
window.sessionStorage.setItem('wx2', 'QF002')
window.sessionStorage.setItem('wx3', 'QF003')

// 2. 查
var wx = window.sessionStorage.getItem('wx')
console.log(wx)
var phoneNum = window.sessionStorage.getItem('pNum')    // 因为没有对应的 key, 所以获取到的值为 null
console.log(phoneNum)

// 3. 删除一条
window.sessionStorage.removeItem('wx3')

// 4. 清空
window.sessionStorage.clear()
// 1. 设置 cookie
document.cookie = 'QQ=123456'

/**
 *  2. 设置一条带有过期时间的 cookie 
 *      cookie 在设置的时候, 会按照世界标准时间设置
 * 
 *      我们的时区为东八区
*/
var timer = new Date()
document.cookie = 'QQ=123456;expires=' + timer

/**
 *  3. 设置一个 3秒 后过期的 cookie
 * 
 *      因为我们所在的东八区, 比世界标准时间快了 8小时
 * 
 *      所以我们想要设置一个 3秒后过期的 cookie 必须将时间往前调整8小时, 然后加上过期时间
*/
var timer = new Date()

timer.setTime(timer.getTime() - 1000 * 60 * 60 * 8 + 1000 * 3)

document.cookie = 'QQ=123456;expires=' + timer

document.cookie = 'WX1=654321'
document.cookie = 'WX2=qwerty'

// 4. 获取 cookie
setTimeout(function () {
    console.log(document.cookie)
}, 5000)

5.本地存储的区别

  1. 出现时间
  • cookie: 有 JS 的时候就存在了
  • storage: H5 出现以后才有
  1. 存储大小
  • cookie: 4k 左右
  • storage: 20M 左右
  1. 前后端交互
  • cookie: 会跟随页面的请求自动携带
  • storage: 不会跟随请求自动携带
  1. 过期时间 cookie: 默认是会话级别, 可以手动设置过期时间 storage: 不能手动设置
  2. 前后端操作
  • cookie: 前后端语言都能操作
  • storage: 只能由 JS 操作

localStorage 和 sessionStorage

  1. 过期时间
  • local: 永久存储, 除非手动删除
  • session: 临时存储
  1. 跨页面通讯
  • local: 直接跨页面通讯
  • session: 只能是当前窗口(页面) 跳转的页面才能通讯
  1. 共同点
  • 只能存储字符串, 不能存储复杂数据类型