01-获取DOM元素修改属性
Web API 基本认知
核心目标
能够完成网页中对的js效果即可
重点:
-
webAPI基本组成
-
DOM, DOM数概念介绍
-
获取元素
-
设置/获取标签属性(标准属性,样式属性,表单属性)
-
定时器(间歇函数)
-
综合案例作用和分类
API概念
-
-
目的:不需要知道代码如何实现、工作细节,快速使用
-
特点:
-
任何开发语言都有自己的API;
-
API的特征是输入和输出; var max = Math.max(1,2,3)
-
API的使用方法
(console.log(\'abc\'))
在控制台打印结果,不是输出内容
-
-
作用: 就是使用 JS 去操作 html 和浏览器
-
组成:
-
ECMASCRIPT(js语法标准)
-
DOM (文档对象模型):document(文档,html文件) object(对象) model(模型)
-
在js中(Web API)将整个网页(html网页)封装成一个对象,该对象叫document
------------------------>操作网页
-
-
BOM(浏览器对象模型):Browser(文档,html文件) object(对象) model(模型)
-
在js中将整个浏览器封装成一个对象,该对象叫window
------------------------------------------------>操作网页操作浏览器
-
-
作用和分类
-
作用: 就是使用 JS 去操作 html 和浏览器
-
分类:DOM (文档对象模型)、BOM(浏览器对象模型)
什么是DOM
-
DOM(Document Object Model——文档对象模型)是用来呈现以及与任意 HTML 或 XML文档交互的API
-
白话文:DOM是浏览器提供的一套专门用来 操作网页内容 的功能
-
操作DOM,本质上就是在操作网页(html各种标签)
-
-
DOM作用:开发网页内容特效和实现用户交互
DOM树
-
DOM树是什么?
-
将 HTML 文档以树状结构直观的表现出来,我们称之为文档树或 DOM 树
-
描述网页内容关系的名词
-
作用:文档树直观的体现了标签与标签之间的关系
-
DOM对象【重要】
-
DOM对象:浏览器根据html标签生成的 JS对象
-
所有的标签属性都可以在这个对象上面找到
-
修改这个对象的属性会自动映射到标签身上
-
DOM的核心思想:把网页内容当做对象来处理
-
document 对象
-
是 DOM 里提供的一个对象
-
所以它提供的属性和方法都是用来访问和操作网页内容的
-
例:document.write()
-
-
网页所有内容都在document里面
-
-
获取页面的标签(获取DOM标签对象)
==查找元素DOM元素就是选择页面中标签元素==
DOM学习路径
-
==先获取页面的标签==------->给标签设置相关的样式属性--------->关键:如何获取页面的标签
获取页面的标签--根据CSS选择器
根据CSS选择器来获取DOM元素 (重点)
query 查询 Selector选择器
选择匹配的第一个元素
-
语法:var abc=
document.querySelector(\'CSS选择器\');
-
参数:包含一个或多个有效的CSS选择器 字符串
-
返回值:
-
CSS选择器匹配的第一个元素,一个 HTMLElement对象。
-
如果没有匹配到,则返回null。
-
多参看文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Document/querySelector
补充教师视频07
<body>
<div>我是cdd</div>
<p class="one" id=two>小兔子真可爱</p>
<script>
//代码演示--获取标签
let a = document.querySelector(\'p\') //标签选择器
console.log(a) //<p class="one" id="two">我喜欢小兔子</p>
let b = document.querySelector(\'.one\') //类选择器
console.log(b)
let c = document.querySelector(\'#two\') //ID选择器
console.dir(c)
let d = document.querySelector(\'p\') //后代选择器
console.dir(d)
//获取返回值
</script>
</body>
选择匹配的多个元素
-
语法:var abc=
document.querySelectorAll(\'CSS选择器\');
-
参数:包含一个或多个有效的CSS选择器 字符串
-
返回值:CSS选择器匹配的NodeList 对象集合
-
例如:document.querySelectorAll(\'ul li\');
-
-
得到的是一个伪数组:
-
有长度有索引号的数组
-
但是没有 pop() push() 等数组方法
-
想要得到里面的每一个对象,则需要遍历(for)的方式获得。
-
哪怕只有一个元素,通过querySelectAll() 获取过来的也是一个伪数组,里面只有一个元素而已
-
案例
需求:请控制台依次输出 3个 li 的 DOM对象
<script>
</script>
其他获取DOM元素方法(了解)
显示隐藏一个div-----获取元素---获取指定div
根据id获取一个元素
语法:document.getElementById(\'\')
示例:document.getElementById(\'nav\')
https://developer.mozilla.org/zh-CN/docs/Web/API/Document/getElementById
注意:返回一个匹配特定 ID的元素.
根据标签名字获取标签一类元素
语法:var abc= document.Element.tagName(\'标签名\')
示例:var abc= getElementByTagName(\'div\')
根据标签的name属性获取一类元素,获取页面所有的div
调用:
document.Element.tagName()
container.Element.tagName
()
注意:
getElementByTagName()
获取到的集合是动态集合,获取到的是 ==数组== ,展开数组里面又是一个个对象。
根据类名获取元素
语法:var abc= getElementsByClassName(\'\')
示例:var abc= document.getElementsByClassName(\'w\')
根据类名获取元素 获取页面 所有类名为w
注意:浏览器兼容性 IE9以后才支持的
获取标签中的文字内容(非表单元素)
设置/修改DOM元素内容-----获取标签中的内容
<body>
<div>我是div标签中的文字</div>
<script>
//代码演示--获取标签
let res = document.querySelector(\'div\') //后代选择器
//获得标签中的文字内容
console.dir(res); //得到标签中的对象
console.log(res.innerHTML) //获取文字
console.log(res.innerText) //获取文字
</script>
</body>
==获取一下页面标签---------->接收一下它---------------->获取一下标签文字内容==
能够修改元素的文本更换内容
DOM对象都是根据标签生成的,所以操作标签,本质上就是操作DOM对象。 就是操作对象使用的点语法。 如果想要修改标签元素的里面的内容,则可以使用如下几种方式: 学习路径: document.write() 方法 对象.innerText 属性 对象.innerHTML 属性
document.write() 方法
只能将文本内容追加到 </body> 前面的位置 文本中包含的标签会被解析
<script>
document.write(\'hello world\');
document.write(\'<h3>你好,世界</h3>\')
</script>
对象.innerText 属性
将文本内容添加/更新到任意标签位置 文本中包含的标签不会被解析
<script>
let info=document.getElementById(\'info\');
info.innerText=(\'<h3>你好,世界</h3>\') //你好,世界
</script>
对象.innerHTML 属性
将文本内容添加/更新到任意标签位置 文本中包含的标签会被解析
<script>
box.innerHTML=(\'<h3>你好,世界</h3>\'); //<h3>你好,世界</h3>
</script>
innerText 跟innerHTML获取标签中文字的区别
-
如果标签中==只包含纯文字==,那么通过innerHTML 和 innerText得到的结果是一样
-
如果标签中==包含其他标签==,那么innerHTML获取内容的时候,==包含了标签==.innerText只获取==纯文本==
三者的区别是什么?
-
document.write() 方法 只能追加到body中
-
元素.innerText 属性 只识别内容,不能解析标签
-
元素.innerHTML 属性 能够解析标签
-
如果还在纠结到底用谁,你可以选择innerHTML
打印4个div中的值
<body>
<div>狮子</div>
<div>猴子</div>
<div>兔子</div>
<div>老牛</div>
<script>
//获取一下页面4个标签-----接收一下它------获取一下标签文字内容
//将每一个人div中的文字输出到控制台中
let res = document.querySelectorAll(\'div\') //此时res是一个数组!!
for(let i=0;i<res.length;i++){
console.log(res[i].innerText)
}
</script>
</body>
给标签设置文字内容
总结:给标签设置内容
-
标签对象.innerHTML =值;
-
标签对象.innerText =值;
innerHTML 和innerText给标签赋值时候的区别:
-
如果给标签只赋值==纯文本,没有区别==
-
如果通过innerHTML给表设置内容,如果内容中包含标签,将该标签在网页中==渲染成对应的标签==
-
如果通过innerText给表设置内容,如果内容中包含标签,==不会渲染标签==,
<body>
<div></div>
<script>
//通过js的方式给标签设置文字内容
// 1、先获取div
let res = document.querySelector(\'div\')
//2、给对象赋值
res.innerText = \'阿里巴巴\'
res.innerHTML = \'阿里巴巴\'
</script>
</body>
案例
需求:随机抽取的名字显示到指定的标签内部,将名字放入span 盒子内部
分析: ①:获取span 元素 ②:得到随机的名字 ③:通过innerText 或者 innerHTML 讲名字写入元素内部
编程思维:
-
在网页中准备一个html标签,添加样式;
-
在程序中准备一个数组,保存的就是学生姓名
-
生成一个随机数
-
从数组中取值
-
将名字赋值给div
-
给div标签对象赋值
<style>
div {
width: 300px;
height: 50px;
border: 1px solid #000;
}
</style>
</head>
<body>
今天中午吃什么<div></div>
<script>
//1. 在网页中准备一个html标签,添加样式;
//2. 在程序中准备一个数组,保存的就是学生姓名
let ary = [\'老苏\', \'老段\', \'pink\', \'秋姐\', \'刀哥\', \'老汤\', \'老狗\'];
//3. 生成一个随机数,保存一下这个随机数
let a = Math.floor(Math.random() * (ary.length - 1 - 0 + 1) + 0)
//4. 从数组中取值---序号等于随机数,找到具体的名字
let b = ary[a]
//5. 将名字赋值给div----找到html标签位置
let res = document.querySelector(\'div\')
//6. 给div标签对象赋值---人->位置
res.innerText = b
</script>
</body>
设置/修改DOM元素属性
==看视频15补充==
通过js操作图片标签 核心:操作图片的src属性 何获取图片标签的src属性?
图片
<body>
<img src="./images(1)/1.webp" alt="">
<script>
let a = document.querySelector(\'img\')
console.log(img.src)
img.src = "./images(1)/2.webp"
</script>
</body>
设置/修改元素常用属性
-
还可以通过 JS 设置/修改标签元素属性,比如通过 src更换 图片
-
最常见的属性比如: href、title、src 等
-
语法:
对象.属性=值
-
案例1
<script>
//1、获取元素
let pic=document.querySelector(\'img\')
//2、操作元素
pic.src=\'./images/b02.jpg\'
pic.title=\'这是一个图片\'
</script>
-
案例2
页面刷新,图片随机更换
需求:当我们刷新页面,页面中的图片随机显示不同的图片
分析:
①:随机显示,则需要用到随机函数 ②:更换图片需要用到图片的 src 属性,进行修改 ③:核心思路: 1. 获取图片元素 2. 随机得到图片序号 3. 图片.src = 图片随机路径
<script>
<body>
<img src="./images(1)/1.webp" alt="">
<script>
//随机切换图片
//1准备一个数组,数组里面保存所有的图片路径
let ary = [\'./images(1)/1.webp\', \'./images(1)/2.webp\', \'./images(1)/3.webp\', \'./images(1)/4.webp\',\'./images(1)/5.webp\', \'./images(1)/6.webp\']
//2.产生一个随机数(整数)
let i = Math.floor(Math.random() * (ary.length - 1 - 0 + 1) + 0)
//3.从数组中将路径随机获取出来
let img_src = ary[i]
//4、将图片路径赋值给图片标签
let res = document.querySelector(\'img\') //来个容器,接一下图片img
res.src = img_src //容器地址=随机地址
</script>
</body>
</script>
操作标签样式---设置/修改元素样式属性
给标签设置样式(CSS)
-
行内式:
-
内嵌式:
-
外联式:
还可以通过 JS 设置/修改标签元素的样式属性。
-
比如通过 轮播图小圆点自动更换颜色样式
-
点击按钮可以滚动图片,这是移动的图片的位置 left 等等
通过Js给标签设置样式--2种方式
行内式:
通过js给标签设置样式
通过 style 属性操作CSS
==行内式==:
-
==语法==:
标签对象.style.CSS样式属性 = 值
-
举例
<body>
<!-- <img src="./images(1)/1.webp" alt=""> -->
<div>通过js给标签设置样式</div>
<script>
let div = document.querySelector(\'div\')
div.style.width = \'200px\';
div.style.height = \'200px\';
div.style.color = \'#fff\';
div.style.backgroundColor = \'#456789\';
div.style.textAlign = \'center\'
div.style.lineHeight = \'200px\'
</script>
</body>
-
注意:
-
修改样式通过style属性引出
-
如果属性有-连接符,需要转换为小驼峰命名法
-
赋值的时候,需要的时候不要忘记加css单位
-
==一定要记得等号后面的‘ ’==
-
4.案例:
需求:当我们刷新页面,页面中的背景图片随机显示不同的图片
分析: ①: 随机函数 ②: css页面背景图片 background-image ③: 标签选择body, 因为body是唯一的标签,可以直接写 document.body.style
通过类名(className)给标签设置样式
<style>
.box {
width: 200px;
height: 200px;
}
.bd {
border-radius: 50%;
}
</style>
</head>
<body>
<div></div>
<script>
let div = document.querySelector(\'div\')
div.className = \'box bd\'
</script>
</body>
-
如果修改的样式比较多,直接通过style属性修改比较繁琐,我们可以通过借助于css类名的形式。
-
语法:
标签对象.className=\'active\'
-
注意:
-
由于class是关键字, 所以使用className去代替
-
className是使用新值换旧值, 如果需要添加一个类,需要保留之前的类名
-
通过classList 方式添加类名
【知识点15】
通过 classList 操作类控制CSS
-
为了解决className 容易覆盖以前的类名,我们可以通过classList方式追加和删除类名
-
语法:
-
==追加一个类==
元素.classList.add(\'类名\')
-
==删除一个类==
元素.classList.remove(\'类名\',\'类名\')
-
-
-
==切换一个类==
元素.classList.toggle(\'类名\')
电源开关
使用 className 和classList的区别?
-
修改大量样式的更方便
-
修改不多样式的时候方便
-
classList 是追加和删除不影响以前类名
设置/修改 表单元素 属性
-
表单很多情况,也需要修改属性,比如点击眼睛,可以看到密码,本质是把表单类型转换为文本框
-
正常的有属性有取值的 跟其他的标签属性没有任何区别
-
获取: DOM对象.属性名
-
设置: DOM对象.属性名 = 新值
表单.value=\'用户名\'
表单.type=\'password\'
-
-
表单属性中添加就有效果,移除就没有效果,一律使用布尔值表示 ==如果为true 代表添加了该属性== 如果是false 代表移除了该属性
-
比如: disabled、checked、selected
-
<body>
<input type="text" value="请输入文字">
<script>
let text = document.querySelector(\'input\');
text.value = \'你好啊\'
</script>
</body>
定时器-间歇函数
定时器函数介绍
-
使用场景
-
网页中经常会需要一种功能:每隔一段时间需要自动执行一段代码,不需要我们手动去触发
-
例如:网页中的倒计时
-
要实现这种需求,需要定时器函数
-
定时器函数有两种,今天我先讲间歇函数
-
定时器函数基本使用
使用定时器函数重复执行代码
-
开启定时器
-
语法:
setInterval(函数,间隔时间)
-
作用:每隔一段时间调用这个函数
-
间隔时间单位是==毫秒==
-
注意:函数名字不需要加括号,定时器返回的是一个id数字
-
举例
<body>
<script>
function fn() {
console.log(\'删库跑路\')
}
setInterval(fn, 1000) //337 删库跑路
</script>
</body><script>
function repeat(){
console.log(\'前端程序员都是好样的\')
}
//每隔1秒调用repeat函数
setInterval(repeat,1000) //setInterval(函数,间隔时间)
</script>
-
-
关闭定时器
-
语法:
let 变量名=setInterval(函数,间隔时间)
clearInterval(变量名) -
一般不会刚创建就停止,而是满足一定条件再停止
-
注意:函数名字不需要加括号,定时器返回的是一个id数字
-
案例:倒计时效果
补充
-
需求:按钮60秒之后才可以使用
-
分析: ①:开始先把按钮禁用(disabled 属性) ②:一定要获取元素 ③:函数内处理逻辑
-
秒数开始减减
-
按钮里面的文字跟着一起变化
-
如果秒数等于0 停止定时器 里面文字变为 同意 最后 按钮可以点击
-
<script>
</script>
综合案例:网页轮播图效果
-
需求:每隔一秒钟切换一个图片
-
分析: ①:获取元素(图片和文字) ②:设置定时器函数 设置一个变量++ 更改图片张数 更改文字信息 ③:处理图片自动复原从头播放 如果图片播放到最后一张就是第9张 则把变量重置为0 注意逻辑代码写到图片和文字变化的前面
<script>
</script>