目录总览
1、DOM简介
1.1、什么是DOM
文档对象模型(Document Object Model,简称 DOM),是 W3C 组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口
W3C 已经定义了一系列的 DOM 接口,通过这些 DOM 接口可以改变网页的内容、结构和样式。
- 文档:一个页面就是一个文档,DOM中使用doucument来表示
- 元素:页面中的所有标签都是元素,DOM中使用 element 表示
- 节点:网页中的所有内容都是节点(标签,属性,文本,注释等),DOM中使用node表示
DOM 把以上内容都看做是对象
2、获取元素
2.1、如何获取页面元素
DOM在我们实际开发中主要用来操作元素。
我们如何来获取页面中的元素呢?
获取页面中的元素可以使用以下几种方式:
- 根据 ID 获取
- 根据标签名获取
- 通过 HTML5 新增的方法获取
- 特殊元素获取
2.2、根据ID获取
使用 getElementByld() 方法可以获取带ID的元素对象
1 | doucument.getElementByld('id名') |
使用 console.dir()
可以打印我们获取的元素对象,更好的查看对象里面的属性和方法。
示例
1 | <div id="time">2019-9-9</div> |
2.3、根据标签名获取
根据标签名获取,使用 getElementByTagName()
方法可以返回带有指定标签名的对象的集合
1 | doucument.getElementsByTagName('标签名'); |
- 因为得到的是一个对象的集合,所以我们想要操作里面的元素就需要遍历
- 得到元素对象是动态的
- 返回的是获取过来元素对象的集合,以伪数组的形式存储
- 如果获取不到元素,则返回为空的伪数组(因为获取不到对象)
1 | <ul> |
2.4、根据标签名获取
还可以根据标签名获取某个元素(父元素)内部所有指定标签名的子元素,获取的时候不包括父元素自己
1 | element.getElementsByTagName('标签名') |
注意:父元素必须是单个对象(必须指明是哪一个元素对象),获取的时候不包括父元素自己
1 | <script> |
2.5、通过H5新增方法获取
①getElementsByClassName
根据类名返回元素对象合集
document.getElementsByClassName('类名')
1 | document.getElementsByClassName('类名'); |
②document.querySelector
根据指定选择器返回第一个元素对象
1 | document.querySelector('选择器'); |
③document.querySelectorAll
根据指定选择器返回所有元素对象
1 | document.querySelectorAll('选择器'); |
注意:
querySelector 和 querySelectorAll 里面的选择器需要加符号,比如: document.querySelector(‘#nav’);
④例子
1 | <script> |
2.6、获取特殊元素
①获取body元素
返回body元素对象
1 | document.body; |
②获取html元素
返回html元素对象
1 | document.documentElement; |
3、事件基础
3.1、事件概述
JavaScript 使我们有能力创建动态页面,而事件是可以被 JavaScript 侦测到的行为。
简单理解: 触发— 响应机制。
网页中的每个元素都可以产生某些可以触发 JavaScript 的事件,例如,我们可以在用户点击某按钮时产生一个事件,然后去执行某些操作。
3.2、事件三要素
- 事件源(谁)
- 事件类型(什么事件)
- 事件处理程序(做啥)
1 | <script> |
3.3、执行事件的步骤
- 获取事件源
- 注册事件(绑定事件)
- 添加事件处理程序(采取函数赋值形式)
1 | <script> |
3.4、鼠标事件
鼠标事件 | 触发条件 |
---|---|
onclick | 鼠标点击左键触发 |
onmouseover | 鼠标经过触发 |
onmouseout | 鼠标离开触发 |
onfocus | 获得鼠标焦点触发 |
onblur | 失去鼠标焦点触发 |
onmousemove | 鼠标移动触发 |
onmouseup | 鼠标弹起触发 |
onmousedown | 鼠标按下触发 |
4、操作元素
JavaScript 的 DOM 操作可以改变网页内容、结构和样式,我们可以利用 DOM 操作元素来改变元素里面的内容 、属性等。注意以下都是属性
4.1、改变元素内容
从起始位置到终止位置的内容,但它去除html标签,同时空格和换行也会去掉。
1 | element.innerText |
起始位置到终止位置的全部内容,包括HTML标签,同时保留空格和换行
1 | element.innerHTML |
1 | <body> |
4.2、改变元素属性
1 | // img.属性 |
4.3、改变样式属性
我们可以通过 JS 修改元素的大小、颜色、位置等样式。
- 行内样式操作
1 | // element.style |
- 类名样式操作
1 | // element.className |
注意:
- JS里面的样式采取驼峰命名法,比如 fontSize ,backgroundColor
- JS 修改 style 样式操作 ,产生的是行内样式,CSS权重比较高
- 如果样式修改较多,可以采取操作类名方式更改元素样式
- class 因为是个保留字,因此使用className来操作元素类名属性
- className 会直接更改元素的类名,会覆盖原先的类名
1 | <body> |
4.4、总结
4.5、排他思想
如果有同一组元素,我们相要某一个元素实现某种样式,需要用到循环的排他思想算法:
- 所有元素全部清除样式(干掉其他人)
- 给当前元素设置样式 (留下我自己)
- 注意顺序不能颠倒,首先干掉其他人,再设置自己
1 | <body> |
4.6、自定义属性
4.6.1、获取属性值
- 获取内置属性值(元素本身自带的属性)
1 | element.属性; |
- 获取自定义的属性
4.6.2、设置属性值
- 设置内置属性值
1 | element.属性 = '值'; |
- 主要设置自定义的属性
1 | element.setAttribute('属性','值'); |
4.6.3、移除属性
1 | element.removeAttribute('属性'); |