DOM
1、Document Object Model: 文档对象模型。DOM 定义了如何通过脚本来访问文档结构。目的其实就是为了能让js操作html元素而制定的一个规范。DOM就是由节点组成的。
2、DOM顶级是html节点
3、HTML加载完毕,渲染引擎会在内存中把HTML文档,生成一个DOM树,getElementById是获取内中DOM上的元素节点。然后操作的时候修改的是该元素的属性。
4、所有的节点组成的就是DOM树。节点包括:元素节点:HMTL标签。文本节点:标签中的文字(比如标签之间的空格、换行)。属性节点::标签的属性。
增删查元素
1 | // 获取body和html节点 |
// 复制节点
let $div = document.querySelector(‘.clsName’)
$div.cloneNode() // 只复制节点本身
$div.cloneNode(true) // 复制节点和所有子节点
增删改查class
1 | let el = document.querySelector('#id') |
删改查style
1 | let el = document.querySelector('#id') |
增删改查属性
let el = document.querySelector(‘#id’)1
2
3
4
5
6//设置属性
el.setAttribute("style", "background: #fff;")
//获取属性
el.getAttribute("style")
//删除属性
el.removeAttribute("style")
事件
DOM事件的级别
1 | // DOM0: |
DOM事件模型
捕获和冒泡。
DOM事件流
讲的就是:浏览器在于当前页面做交互时,这个事件是怎么传递到页面上的。
完整的事件流:(1)捕获:从 window 对象传到 目标元素。顺序是:window –> document –> html–> body –> 父元素、子元素、目标元素。
(2)目标阶段:事件通过捕获,到达目标元素,这个阶段就是目标阶段。
(3)冒泡:从目标元素传到 Window 对象。
常见事件
1 | onclick |
事件绑定
1 | // 1、行内绑定 |
事件对象
1、触发DOM上的某个事件时,都会产生一个事件对象event。
2、兼容性:event = event || window.event(IE6,7,8)
3、event常用属性1
2
3
4
5
6
7event.bubbles // true表示事件可以冒泡,不是所有的事件都可以冒泡
event.stopPropagation() // 阻止冒泡,当bubbles为true可以使用
event.cancelable // 为true表示可以取消事件的默认事件
event.preventDefault() // 取消默认事件,当cancelable为true时
event.currentTarget // 执行事件时的那个元素,即currentTarget始终 === this
event.targget // 真正触发的事件的元素,比如事件点击的元素
event.type // 被触发的事件的类型,如'click','input'
样式
style和window.getComputedStyle的异同
同:getComputedStyle 和 element.style 的相同点就是二者返回的都是 CSSStyleDeclaration 对象,取相应属性值得时候都是采用的 CSS 驼峰式写法,均需要注意 float 属性。
异:element.style 读取的只是元素的内联样式,即写在元素的 style 属性上的样式;而 getComputedStyle 读取的样式是最终样式,包括了内联样式、嵌入样式和外部样式。
getComputedStyle兼容性:IE支持9,其他均支持
记忆方法
clientWidth/clientHeight获取content+padding
clientTop/clientLeft获取border
offsetWidht/offsetHeight获取content+padding+border
offsetTop/offsetLeft不准确的理解为获取margin
获取元素的各种宽高度
1 | let el = document.querySelector('.cls1') |
元素的偏移量
offsetTop/offsetLeft:获取元素距离当前最近非position: static;父元素的上偏移/左偏移,假如父元素都是position: static;则指向body元素。假如元素有设定left,top,则按照此值来1
2el.offsetTop
el.offsetLeft
鼠标的偏移量
clientX:当鼠标事件发生时,鼠标相对于浏览器(这里说的是浏览器的有效区域)x轴的位置;
clientY:当鼠标事件发生时,鼠标相对于浏览器(这里说的是浏览器的有效区域)y轴的位置;
screenX:当鼠标事件发生时,鼠标相对于显示器屏幕x轴的位置;// 不常用
screenY:当鼠标事件发生时,鼠标相对于显示器屏幕y轴的位置;// 不常用
offsetX:当鼠标事件发生时,鼠标相对于事件源x轴的位置
offsetY:当鼠标事件发生时,鼠标相对于事件源y轴的位置
元素相对于浏览器的偏移量
1 | let location = document.querySelector('#id').getBoundingClientRect() // 相对于去除菜单栏的窗口 |
元素的滚动
scrollWidth/scrollHeight:获取元素的文档宽高,包含溢出部分,假如内容没有溢出,那就展示本身元素的宽高(padding+content)
scrollTop/scrollLeft: 获取元素滚动的举例
可视区域的宽高
1 | document.documentElement.clientWidth |
浏览器的宽高
1 | window.innerWidth //除去菜单栏的窗口宽度 |
电脑屏幕的宽高
1 | window.screen.height//电脑屏幕的高度 |