3. 设置/修改 DOM 对象
3.1 设置/修改 DOM 元素内容
DOM 对象都是根据标签生成的,所以操作标签本质上就是操作 DOM 对象,就是操作对象使用的 点语法 。
如果想要 修改 标签元素里面的 内容 ,可以使用以下几种方式:
(1)document.write() 方法
document.write() 只能将文本内容 追加 到 </body> 前面的位置,文本中包含的标签会被解析。
示例:
<body>
<script>
document.write('<div>示例</div>')
</script>
</body>
(2)对象.innerText 属性
对象.innerText 属性会将文本内容添加或更新到任意标签位置,文本中包含的标签 不会 被解析。
示例1:
<body>
<div></div>
<script>
let div = document.querySelector('div')
div.innerText = '小鱼吐泡泡'
</script>
</body>
示例2:
<body>
<div></div>
<script>
let div = document.querySelector('div')
div.innerText = '<span>小鱼吐泡泡</span>'
</script>
</body>
(3)对象.innerHTML 属性
对象.innerHTML 属性会将文本内容添加或更新到任意标签位置,文本中包含的标签 会 被解析。
<body>
<div></div>
<script>
let div = document.querySelector('div')
div.innerHTML = '<span>小鱼吐泡泡</span>'
</script>
</body>
实例:将随机抽取的名字显示到指定的标签内部
分析:
- 首先写好标签样式,获取到 div 元素;
- 然后封装随机函数;
- 通过 innerHTML 或 innerText 将名字写入元素内部
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
div {
width: 100px;
height: 40px;
background-color: #74f870;
line-height: 40px;
text-align: center;
}
</style>
</head>
<body>
抽中了:
<div></div>
<script>
let div = document.querySelector('div')
let arr = ['灵犀', '小明', '小红', '李四', '张三']
function getRandom(min, max) {
let r = Math.floor(Math.random() * (max - min + 1)) + min
return r
}
let name = arr[getRandom(0, arr.length - 1)]
div.innerHTML = name
</script>
</body>
</html>
3.2 设置/修改 DOM 元素常用属性
还可以通过 JS 设置/修改标签元素的属性,比如通过 title 修改标题,常见的属性有 href、title、src 等
语法:对象.属性 = 值 :
<body>
<div></div>
<script>
let div = document.querySelector('div')
div.className = 'box'
</script>
</body>
示例:刷新页面时随机显示图片
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<img src="./1.png" alt="" />
<script>
// 得到元素
let img = document.querySelector('img')
// 随机得到图片序号
function getRan(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min
}
// src 赋值
img.src = `./${getRan(1, 8)}.png`
</script>
</body>
</html>
3.3 设置/修改 DOM 元素样式属性
还可以通过 JS 设置/修改标签元素的样式属性,比如通过点击按钮可以滚动图片、轮播图自动更换小圆点的样式等
(1)通过 style 属性操作 CSS
语法:对象.style.样式属性 = 值
修改样式是通过 style 属性引出的,如果属性有连接符(-),需要转换为 小驼峰 命名法,赋值的时候,如果有单位,不要忘记加 CSS 单位
<body>
<div></div>
<script>
let div = document.querySelector('div')
div.style.backgroundColor = 'lightBlue'
div.style.height = '80px'
div.style.width = '100px'
</script>
</body>
示例:刷新页面,随机更换背景
<body>
<script>
let body = document.querySelector('body')
function getRan(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min
}
let img = getRan(1, 8)
body.style.backgroundImage = `url(./${img}.png)`
</script>
</body>
因为页面只有一个 body 标签 ,因此也可以直接写为:
(2)通过操作类名操作 CSS
如果修改的样式比较多,直接通过 style 属性修改样式的话比较繁琐,可以借助 CSS 类名 的形式修改
语法:元素.className = '类名'
由于 class 是关键字,所以使用了 className 来代替,className 是使用新值 替换 旧值,如果需要添加一个类,则要保留之前的类名,如果直接赋值会覆盖以前的类名
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
div {
width: 100px;
height: 100px;
background-color: lightgreen;
}
.box {
background-color: #9895f8;
}
</style>
</head>
<body>
<div></div>
<script>
let div = document.querySelector('div')
div.className = 'box'
</script>
</body>
</html>
保留之前的类:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
.one {
width: 100px;
height: 100px;
background-color: lightgreen;
}
.box {
border: 2px solid #000;
}
</style>
</head>
<body>
<div class="one"></div>
<script>
let div = document.querySelector('div')
div.className = 'one box'
</script>
</body>
</html>
(3)通过 classList 操作类控制 CSS
为了解决 className 容易覆盖以前的类名问题,可以通过 classList 的方式追加和删除类名
语法:
- 追加类:
元素.classList.add('类名') - 删除类:
元素.classList.remove('类名') - 切换类:
元素.classList.toggle('类名')
示例1:添加类
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
.one {
width: 100px;
height: 100px;
background-color: lightgreen;
}
.box {
border: 2px solid #000;
}
</style>
</head>
<body>
<div class="one"></div>
<script>
let div = document.querySelector('div')
div.classList.add('box')
</script>
</body>
</html>
示例2:删除类
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
.one {
width: 100px;
height: 100px;
background-color: lightgreen;
}
.box {
border: 2px solid #000;
}
</style>
</head>
<body>
<div class="one"></div>
<script>
let div = document.querySelector('div')
div.classList.remove('one')
</script>
</body>
</html>
示例3:切换类 - 有就删除,没有就添加
(1)元素原本就有 one 这个类,所以使用切换类就会删除原有的类
(2)如果元素原本没有这个类,使用切换类就会添加这个类
3.4 设置/修改表单元素属性
表单很多情况下也需要修改属性,比如点击眼睛可以显示密码,本质就是把表单类型转换为文本框类型
获取表单元素:DOM对象.属性名
设置表单属性值:DOM对象.属性名 = 新值
<body>
<input type="text" value="请输入文字" />
<script>
let input = document.querySelector('input')
console.log(input.value)
</script>
</body>
<body>
<input type="text" value="请输入文字" />
<script>
let input = document.querySelector('input')
input.value='新文字'
</script>
</body>
表单属性中添加有效果,不添加就没有效果,统一使用 布尔值 表示,如果是 true ,说明元素添加了该属性;如果是 false ,则代表移除了该属性,比如:disabled、checked、selected
例如:按钮是否禁用
<body>
<button disabled>按钮</button>
<script>
let btn = document.querySelector('button')
btn.disabled = false
</script>
</body>
4. 定时器 - 间歇函数
网页中经常会需要一种功能:每隔一段时间后需要自动执行一段代码,不需要我们手动去触发,例如倒计时,要实现这个功能就需要 定时器函数 ,定时函数有两种,其中一种是 间歇函数
4.1 开启定时器
定时器函数可以开启和关闭定时器
setInterval(函数,间隔时间) 函数的作用是每隔一段时间就调用这个函数,间隔的时间单位是 毫秒
示例:每隔一秒钟打印一句话
<body>
<script>
setInterval(function () {
console.log('Wen APIs 学习')
}, 1000)
</script>
</body>
也可以这样写:
<body>
<script>
function fun() {
console.log('Wen APIs 学习')
}
setInterval(fun, 1000)
</script>
</body>
4.2 关闭定时器
定时器函数一般不会刚创建就停止,而是满足一定条件后再停止的
函数名字不需要加括号,定时器返回的是一个 id 数字
<body>
<script>
function fun() {
console.log('Wen APIs 学习')
}
let id = setInterval(fun, 1000)
console.log(id)
</script>
</body>
倒计时效果:按钮 5 秒之后才可以使用
分析:
- 首先把按钮禁用;
- 获取按钮元素
- 使用定时函数,秒数开始减,按钮里面的文字跟着一起变化,如果秒数等于 0 时,停止定时器,文字改变,同时按钮可点击
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
button {
margin-top: 10px;
}
</style>
<body>
<div class="box">
<textarea id="txt" cols="20" rows="10">
用户协议:欢迎使用XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
</textarea>
<br />
<button disabled>已阅读用户协议(5)</button>
</div>
<script>
let btn = document.querySelector('button')
let i = 5
let id = setInterval(function () {
i--
btn.innerHTML = `已阅读用户协议(${i})`
if (i === 0) {
clearInterval(id)
btn.innerHTML = '同意'
btn.disabled = false
}
}, 1000)
</script>
</body>
</html>
网页轮播图效果:每个一秒切换一个图片
分析:
- 获取元素,包括图片和文字
- 设置定时函数:设置一个变量、更改图片张数、更改文字信息
- 处理图片自动复原,从头开始播放:如果图片播到最后一张,就把变量重置为 0
- 注意逻辑代码写到图片和文字变化的前面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>JS 轮播图</title>
<style>
.img-box {
width: 558px;
height: 501px;
margin: 50px auto 0;
background: #000;
position: relative;
}
.img-box .tip {
width: 558px;
height: 53px;
line-height: 53px;
position: absolute;
bottom: 0px;
background-color: rgba(0, 0, 0, 0.8);
z-index: 1;
}
.img-box .tip h3 {
width: 82%;
margin: 0;
margin-right: 20px;
padding-left: 20px;
color: #98e404;
font-size: 28px;
float: left;
font-weight: 500;
font-family: 'Microsoft Yahei', Tahoma, Geneva;
}
img {
width: 558px;
height: 501px;
}
</style>
</head>
<body>
<div class="img-box">
<img class="pic" src="3.png" alt="" />
<div class="tip">
<h3>今天也要爱自己哦~</h3>
</div>
</div>
<script>
// 数据
let data = [
{
imgSrc: '3.png',
title: '今天也要爱自己哦~'
},
{
imgSrc: '4.png',
title: '断!舍!离!'
},
{
imgSrc: '5.png',
title: '我生来就是高山'
},
{
imgSrc: '6.png',
title: '甜蜜攻势再次回归'
},
{
imgSrc: '7.png',
title: '美貌与智力并存'
},
{
imgSrc: '8.png',
title: '活出精彩人生'
}
]
let img = document.querySelector('.pic')
let txt = document.querySelector('.tip h3')
let i = 0 //记录图片张数
setInterval(() => {
i++ // 当i=5时,将-1赋值给i,此时i=0,图片从头开始播放
// 修改图片路径和文字内容
img.src = data[i].imgSrc
txt.innerHTML = data[i].title
if (i === data.length - 1) {
i = -1 // 本例中一共有6张图片,当i=5时,将-1赋给i(因为i是从0开始的)
}
}, 1000)
</script>
</body>
</html>