Web API 基本认知
作用: 就是使用 JS 去操作 html 和浏览器 分类:DOM (文档对象模型)、BOM(浏览器对象模型)
什么是DOM
DOM(Document Object Model——文档对象模型)是用来呈现以及与任意 HTML 或 XML文档交互的API 白话文:DOM是浏览器提供的一套专门用来 操作网页内容 的功能 DOM作用
- 开发网页内容特效和实现用户交互
DOM树
DOM树是什么 将 HTML 文档以树状结构直观的表现出来,我们称之为文档树或 DOM 树 描述网页内容关系的名词 作用:文档树直观的体现了标签与标签之间的关系
DOM对象
DOM对象:浏览器根据html标签生成的 JS对象
- 所有的标签属性都可以在这个对象上面找到
- 修改这个对象的属性会自动映射到标签身上
DOM的核心思想
- 把网页内容当做对象来处理
document 对象
-
是 DOM 里提供的一个对象
-
所以它提供的属性和方法都是用来访问和操作网页内容的
- 例:document.write()
-
网页所有内容都在document里面
获取
获取DOM对象
查找/获取DOM对象
提问:我们想要操作某个标签首先做什么?
- 肯定首先选中这个标签,跟 CSS选择器类似,选中标签才能操作
- 查找元素DOM元素就是选择页面中标签元素
根据CSS选择器来获取DOM元素 (重点)
选择匹配的第一个元素 语法:
document.querySelector('css选择器')
参数:
包含一个或多个有效的CSS选择器 字符串
返回值:
CSS选择器匹配的第一个元素,一个 HTMLElement对象。 如果没有获取到元素,则返回null
选择匹配的多个元素
语法:
document.querySelectorAll('css选择器')
参数:
包含一个或多个有效的css选择器 字符串
返回值:
css选择器匹配的NodeList 对象集合
如果没有获取到满足条件的元素,也会返回一个空的伪数组
- 哪怕只有一个元素,通过querySelectAll() 获取过来的也是一个伪数组,里面只有一个元素而已
得到的是一个伪数组: 有长度有索引号的数组 但是没有 pop() push() 等数组方法 想要得到里面的每一个对象,则需要遍历(如 for)的方式获得。
document.querySelectorAll('ul li')
其他获取DOM元素方法
根据id获取一个元素
document.getElementById('nav')
根据标签获取一类元素 获取页面 所有div
document.getElementByTagName('div')
根据类名获取元素 获取页面 所有类名为w的元素
document.getElementByClassName('w')
修改元素的文本更换内容
方法:
- document.write() 方法
只能将文本内容追加到 前面的位置 文本中包含的标签会被解析
- 对象.innerText 属性
将文本内容添加/更新到任意标签位置 文本中包含的标签不会被解析
- 对象.innerHTML 属性
将文本内容添加/更新到任意标签位置 文本中包含的标签会被解析
设置/修改元素常用属性
还可以通过 JS 设置/修改标签元素属性,比如通过 src更换 图片 最常见的属性比如: href、title、src 等
对象.属性=值
//获取元素
let pic=document.querySlector('img')
//操作元素
pic.src='./images/b02.jpg'
pic.title='这是一个图片'
设置/修改元素样式属性
还可以通过 JS 设置/修改标签元素的样式属性。
- 比如通过 轮播图小圆点自动更换颜色样式
- 点击按钮可以滚动图片,这是移动的图片的位置 left 等等
学习路径:
通过 style 属性操作CSS
对象.style.样式属性=值
let box=document.querySlector('.box')
.box.style.backgroundColor='red'
.box.style.width='300px'
.box.style.marginTop='50px'
注意: 修改样式通过style属性引出 如果属性有-连接符,需要转换为小驼峰命名法 赋值的时候,需要的时候不要忘记加css单位
操作类名(className) 操作CSS
如果修改的样式比较多,直接通过style属性修改比较繁琐,我们可以通过借助于css类名的形式。
由于class是关键字, 所以使用className去代替 className是使用新值换旧值, 如果需要添加一个类,需要保留之前的类名
元素.className='类名'
通过 classList 操作类控制CSS
为了解决className 容易覆盖以前的类名,我们可以通过classList方式追加和删除类名
//追加一个类
元素.classList.add('类名')
//删除一个类
元素.classList.remove('类名')
//切换一个类
元素.classList.toggle('类名')
总结
- Web API阶段我们学习那两部分? DOM BOM
-
DOM 是什么?有什么作用? DOM 是文档对象模型 操作网页内容,可以开发网页内容特效和实现用户交互
-
DOM 树是什么? 将 HTML 文档以树状结构直观的表现出来,我们称之为文档树或 DOM 树 作用:文档树直观的体现了标签与标签之间的关系
-
DOM对象怎么创建的? 浏览器根据html标签生成的 JS对象(DOM对象) DOM的核心就是把内容当对象来处理
-
document 是什么? 是 DOM 里提供的一个对象 网页所有内容都在document里面
-
获取一个DOM元素我们使用谁? querySelector()
-
获取多个DOM元素我们使用谁? querySelectorAll()
-
querySelector() 方法获取到的元素能直接操作修改吗? 可以
-
querySelectorAll() 方法获取到的元素能直接修改吗? 如果不能可以怎么做到修改? 不可以, 只能通过遍历的方式。依次给里面的元素做修改
-
获取页面中的标签我们最终常用那两种方式? querySelectorAll() ; querySelector()
-
他们两者的区别是什么? querySelector() 只能选择一个元素, 可以直接操作
querySelectorAll() 可以选择多个元素,得到的是伪数组,需要遍历得到每一个元素
- 他们两者小括号里面的参数有神马注意事项?
里面写css选择器 必须是字符串,也就是必须加引号
-
设置/修改DOM元素内容有哪3钟方式? document.write() 方法 元素.innerText 属性 元素.innerHTML 属性
-
三者的区别是什么? document.write() 方法 只能追加到body中 元素.innerText 属性 只识别内容,不能解析标签
元素.innerHTML 属性 能够解析标签 如果还在纠结到底用谁,你可以选择innerHTML
-
设置/修改元素样式属性通过style属性引出来
-
如果需要修改一个div盒子的样式,比如 padding-left, 如何写? element.style.paddingLeft = ‘300px’ 小驼峰命名法
-
因为我们是样式属性,一定别忘记,大部分数字后面都需要加单位
-
使用 className 有什么好处? 可以同时修改多个样式
-
使用 className 有什么注意事项? 直接使用 className 赋值会覆盖以前的类名
-
使用 className 和classList的区别? 修改大量样式的更方便 classList 修改不多样式的时候方便 className classList 是追加和删除不影响以前类名