02-JS BOM和DOM

JavaScript = ECMAscript + BOM + DOM
- BOM:Browser Object Model,
浏览器对象模型。 - DOM:Document Object model,
文档对象模型。
1. BOM
1.1 定义
BOM (Browser Object Model)浏览器对象模型,操作浏览器的能力,核心是 window 对象。
- window,是浏览器内置的一个对象,包含着操作浏览器的方法。
书写时都可以省略 window.
1.2 浏览器窗口尺寸
innerHeight和innerWidth对应分别获取浏览器窗口的高度和宽度(包含滚动条)
1 | |
1.3 浏览器的弹出层
alert()浏览器弹窗confirm()浏览器确认弹窗prompt()浏览器输入弹窗
1 | |
1.4 浏览器地址信息
location专门用来存储浏览器地址栏内的信息location.href获取当前页面的地址,也可以用于跳转页面【常用】
1 | |
1.5 浏览器常见事件
window.onload页面所有资源都加载完毕后执行window.resize当浏览器窗口的大小发生改变时触发window.onscroll当浏览器窗口滚动时触发document.documentElement.scrollTop || document.body.scrollTop纵向滚动距离(兼容性)document.documentElement.scrollLeft || document.body.scrollLeft横向滚动距离(兼容性)window.scrollTo(0, 0)回到顶部window.open(url)打开标签页urlwindow.close()关闭当前标签页window.history.forward()==window.history.go(1)前进一页(需要有历史记录)window.history.back()==window.history.go(-1)返回上一页【最常用】
1 | |
标签页:
1 | |
浏览器历史记录前进和后退:
1 | |
1.6 本地存储
1.6.1 localStorage-永久
注意:永久存储,关闭页面或浏览器不会消失,只有在刻意去清除或者卸载浏览器操作等才会消失。
localStorage.setItem(key, value)存/改 一个键值对到本地存储中,只能存储字符串类型的数据localStorage.getItem(key)获取本地存储中key的value值,读取 json字符串时要进行解析localStorage.removeItem(key)删除本地存储中的key和valuelocalStorage.clear()删除所有的本地存储内容
1 | |
1.6.2 sessionStorage-会话
注意:会话存储,即临时存储,只要页面关闭即消失。
1 | |
案例:记住用户名
1 | |
效果:

2. DOM
2.1 定义
DOM (Document Object model)文档对象模型,操作 html 中标签的能力,核心是 document 对象。(DOM树)
- document,是浏览器内置的一个对象,存储着专门用来操作元素的各种方法。
2.2 获取元素的方式
document.documentElement获取html根元素对象document.head获取head元素对象document.body获取body元素对象document.getElementById(id)获取对应id的标签元素document.getElementsByClassName(class)获取对应class的标签元素document.getElementsByTagName(tag)获取对应tag标签的元素document.getElementsByName(name)获取对应name的标签元素,取值需要加索引,即res[0]document.querySelector("#id")通过 css 选择器获取元素:返回第一个匹配的元素document.querySelectorAll(".class")通过 css 选择器获取元素:返回所有匹配的元素
1 | |
2.3 操作元素的属性
.属性操作原生属性直接可以通过 . 找到对应属性的值,如 input框中的 username.type.setAttribute(key, value)设置自定义属性和值.getAttribute(key)获取自定义属性和值.removeAttribute(key)自定义属性移除属性和值data-***H5规范约定使用data-来命名属性时,就可以通过.dataset属性再.属性获取/设置自定义属性的值
1 | |
案例:密码可视
1 | |
效果:

案例:购物车全选
1 | |
效果:

2.4 操作元素的文本
.innerHTML完整的html内容,包含标签+内容.innerText只有元素(标签)的文本内容.value元素内属性的文本内容value值
1 | |
案例:渲染页面
1 | |
效果:

2.5 操作元素的样式
.stylestyle对象,可以获取到所有的行内样式,只能获取行内样式getComputedStyle(e)只能获取,不能设置样式,read-only 的.className可以获取或设置元素的类名,但要严谨的空格隔开.classList可以获取或设置元素的类名列表.add(class)添加样式类.remove(class)删除样式类.toggle(class)切换样式类(添加-删除 来回切换)
1 | |
批量获取和设置:
1 | |
案例:简易选项卡
1 | |
效果:

案例:选项卡
.dataset.index 给元素添加属性 data-index=”值”
1 | |
效果:

2.6 DOM节点
DOM常用三大类元素节点、 文本节点、属性节点。
- 获取到的元素/标签,叫元素节点,通过
getElementBy...() 获取到的都是元素节点 - 标签里面写的文字,就是文本节点,通过
getAttribute() 获取到的就是元素的属性节点 - 标签上的属性,就是属性节点,通过
innerText 获取到的就是元素的文本节点 - DOM树:
- document

- html

- 元素节点

- 文本内容

- 属性节点

- 注释节点

- document
2.7 获取DOM节点
e.childNodes所有子节点(元素节点、文本节点、注释节点等)e.children只有元素节点e.firstChild第一个子节点(包含元素节点、文本节点、注释节点等)e.firstElementChild第一个元素子节点e.lastChild最后一个子节点(包含元素节点、文本节点、注释节点等)e.lastElementChild最后一个元素子节点e.previousSibling前一个兄弟节点(包含元素节点、文本节点、注释节点等)e.previousElementSibling前一个元素兄弟节点e.nextSibling后一个兄弟节点(包含元素节点、文本节点、注释节点等)e.nextElementSibling后一个元素兄弟节点e.parentNode父节点(包含元素节点、文本节点、注释节点等)e.parentElement父元素节点e.getAttribute("id")获取元素的属性名为id的属性对应值e.attributes获取元素的所有属性列表,返回一个 NodeNameMap 对象
1 | |
2.8 操作DOM节点
document.createElement(tag)创建元素节点.appendChlid(e)追加子节点.insertBefore(e, 目标节点)在目标节点前面插入节点.removeChild(e)删除子节点.remove()删除自己以及后代节点.replaceChild(新节点, 旧节点)替换子节点.cloneNode(bool)克隆节点: false-不克隆后代,true-克隆后代
1 | |
案例:动态删除
1 | |
效果:

2.9 获取节点类型
e.nodeType节点类型:1-元素节点,2-属性节点,3-文本节点

1 | |
2.10 获取元素尺寸
就是获取元素的“占地面积”。
.offsetWidth,获取的是元素 内容+padding+border 的宽度.offsetHeight,获取的是元素 内容+padding+border 的高度.clientWidth,获取的是元素 内容+padding 的宽度.clientHeight,获取的是元素 内容+padding 的高度
注意:
- 获取到的尺寸是没有单位的数字
- 当元素在页面不占位置的时候,获取到的是0
- display: none; 元素在页面不占位
- 怪异盒子模型,不影响计算结果
1 | |
2.11 获取元素的偏移量
.offsetLeft左侧偏移量(相对定位父级,否则为body).offsetTop顶部偏移量(相对定位父级,否则为body).clientLeft左侧偏移量(相对于左边框==边框尺寸).clientTop顶部偏移量(相对于顶部边框==边框尺寸)
注意:
- 参考点是
定位父级(最近一层的定位父级) - 如果父级没有定位,则参考点相对于
body

2.12 获取可视窗口尺寸
document.documentElement.clientHeightdocument.documentElement.clientWidth
对应分别获取浏览器中可视窗口的高度和宽度(不包含滚动条)
1 | |
案例:懒加载(滚动加载)
1 | |
效果(右侧滚动条会额外加载,效果参考):
