学习视频及笔记参考来源:
JavaScript基础语法-dom-bom-js-es6新语法-jQuery-数据可视化echarts黑马pink老师前端入门基础视频教程(500多集)持续_哔哩哔哩_bilibili
文档对象模型(Document Object Model,简称 DOM),是 W3C 组织推荐的处理可扩展标记语言(HTML 或者XML)的标准编程接口。
W3C 已经定义了一系列的 DOM 接口,通过这些 DOM 接口可以改变网页的内容、结构和样式。
获取元素的几种方式:(1)根据 ID 获取。(2)根据标签名获取。(3)通过 HTML5 新增的方法获取。(4)特殊元素获取。
document.getElementById('id');
2019-9-9
document.getElementsByTagName('标签名');
11
11
11
11
11
11
document.getElementsByClassName('类名');// 根据类名返回元素对象集合
2020-9-9
document.body // 返回body元素对象
document.documentElement // 返回html元素对象
事件三要素:
1、事件源(要点击谁,触发谁)。
2、事件类型(什么样的事件,怎么触发)。
3、事件处理程序(具体实现啥,要做啥)。
执行事件的步骤:
1、获取事件源。
2、注册事件(绑定事件)。
3、添加事件的处理程序(采取函数赋值的形式)。
// 1. 获取事件源 var btn = document.getElementById('btn'); // 2. 注册事件 btn.onclick // 3. 添加事件处理程序 function() {} btn.onclick = function() { alert('你好吗'); };
// 从起始位置到终止位置的内容, 但它去除 html 标签, 同时空格和换行也会去掉
element.innerText = '';
// (更常用!)起始位置到终止位置的全部内容,包括 html 标签,同时保留空格和换行
element.innerHTML = '';
1、innerText、innerHTML 改变元素内容
2、src、href
3、id、alt、title
// 比如要改变图片,可以更改 img 的 src 属性
img.src = 'images/1.jpg';
1、element.style 行内样式操作
2、element.className 类名样式操作(直接修改所调用的类,适用于样式较多的情况)
// 仿关闭淘宝二维码
Document
关闭
如果有同一组元素,我们想要某一个元素实现某种样式, 需要用到循环的排他思想算法:
// 百度换肤效果
Document
H5规定自定义属性data-开头做为属性名并且赋值。
比如
,或者使用 JS 设置 element.setAttribute(‘data-index’, 2)。兼容性获取 element.getAttribute(‘data-index’);
H5新增 element.dataset.index 或者 element.dataset[‘index’] ie 11才开始支持。
如果是
,获取时候需要用驼峰命名法的标准:element.dataset.indexNum;
Document
三种动态创建元素方法:
(1)document.write()
(2)element.innerHTML
(3)document.createElement()
区别:
(1)document.write 是直接将内容写入页面的内容流,但是文档流执行完毕,则它会导致页面全部重绘。innerHTML 是将内容写入某个 DOM 节点,不会导致页面全部重绘。
(2)innerHTML 创建多个元素效率更高(不要拼接字符串【3s】,采取数组形式拼接【8ms】),结构稍微复杂。createElement() 创建多个元素效率稍低一点点【20ms】,但是结构更清晰。
网页中的所有内容都是节点(标签、属性、文本、注释等),在DOM 中,节点使用 node 来表示。HTML DOM 树中的所有节点均可通过 JavaScript 进行访问,所有 HTML 元素(节点)均可被修改,也可以创建或删除。
一般地,节点至少拥有nodeType(节点类型)、nodeName(节点名称)和nodeValue(节点值)这三个基本属性。
元素节点 nodeType 为 1。 在实际开发中,节点操作主要操作的是 元素节点。 属性节点 nodeType 为 2。- 文本节点 nodeType 为 3 (文本节点包含文字、空格、换行等)。
node.parentNode
parentNode.childNodes (不推荐) |
1、parentNode.childNodes 返回包含指定节点的子节点的集合,该集合为即时更新的集合。 2、返回值里面包含了所有的子节点,包括元素节点,文本节点等。 3、如果只想要获得里面的元素节点,则需要专门处理。 所以我们一般不提倡使用childNodes。 |
parentNode.children ( 重点掌握 ) |
parentNode.children 是一个只读属性,返回所有的子元素节点。它只返回子元素节点,其余节点不返回(重点掌握)。 |
parentNode.firstChild parentNode.lastChild (不推荐) |
返回第一个子节点 返回最后一个子节点 找不到则返回 null 。此做法包含所有节点(元素、文本等) |
parentNode.firstElementChild parentNode.lastElementChild |
返回第一个子元素节点 返回最后一个子元素节点 |
parentNode.children[0] ( 重点掌握 ) |
通过索引直接获取元素节点 |
document.createElement('tagName')
node.appendChild(child)
node.removeChild(child)
// 浅拷贝
node.cloneNode()
// 深拷贝
node.cloneNode(true)
创建 | 1. document.write 2. innerHTML 3. createElement |
增 | 1. appendChild 2. insertBefore |
删 | 1. removeChild |
改 | 目的:主要修改dom的元素属性,dom元素的内容、属性, 表单的值等。 1. 修改元素属性: src、href、title等 2. 修改普通元素内容: innerHTML 、innerText 3. 修改表单元素: value、type、disabled等 4. 修改元素样式: style、className |
查 | 目的:主要获取查询dom的元素。 1. DOM提供的API 方法: getElementById、getElementsByTagName(古老方法,不太推荐) 2. H5提供的新方法: querySelector、querySelectorAll (推荐)。 3. 利用节点操作获取元素: 父(parentNode)、子(children)、兄(previousElementSibling、 nextElementSibling) (推荐)。 |
属性操作 | 目的:主要针对于自定义属性。 1. setAttribute:设置dom的属性值 2. getAttribute:得到dom的属性值 3. removeAttribute移除属性 |
事件操作 | 给元素注册事件, 采取 【事件源.事件类型 = 事件处理程序】 |