JavaScript学习文档(7):Web API、获取DOM对象、操作元素内容、元素属性、定时器-间歇函数

本文主要是介绍JavaScript学习文档(7):Web API、获取DOM对象、操作元素内容、元素属性、定时器-间歇函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、Web API

1、作用和分类

2、DOM是什么

3、DOM树

4、DOM对象

(1)DOM对象如何创建的?

(2)DOM对象怎么创建的?

二、获取DOM对象

1、根据CSS选择器来获取DOM元素

(1)选择匹配的第一个元素

(2)选择匹配的多个元素

2、其他获取DOM元素方法

三、操作元素内容

1、元素innerText 属性

2、元素innerHTML 属性

四、操作元素属性

1、操作元素常用属性

(1)图片随机更换

2、操作元素样式属性

(1)通过 style 属性操作CSS

案例:页面随机更换背景图片

(2)操作类名(className) 操作CSS

(3)通过 classList 操作类控制CSS

3、操作 表单元素属性

4、自定义属性

五、定时定时器-间歇函数

1、定时器函数介绍

2、定时器函数基本使用

(1)开启定时器

(2)关闭定时器

3、阅读注册协议案例

4、轮播图定时器


一、Web API

1、作用和分类

  • 作用:就是使用JS去操作html和浏览器
  • 分类:DOM (文档对象模型)、BOM(浏览器对象模型)

2、DOM是什么

  • DOM (Document 0bject Model——文档对象模型)是用来呈现以及与任意HTML或XML文档交互的API
  • 白话文:DOM是浏览器提供的一套专门用来操作网页内容的功能

3、DOM树

  • DOM树是什么

(1)将HTML文档以树状结构直观的表现出来,我们称之为文档树或DOM树

(2)描述网页内容关系的名词

(3)作用:文档树直观的体现了标签与标签之间的关系

4、DOM对象

(1)DOM对象如何创建的?
  • 浏览器根据html标签生成的JS对象(DOM对象)
  • DOM的核心就是把内容当对象来处理
(2)DOM对象怎么创建的?
  • 是DOM里提供的一个对象
  • 网页所有内容都在document里面
  <div>123</div><script>const div = document.querySelector('div')// 打印对象console.dir(div)  // dom 对象</script>

二、获取DOM对象

1、根据CSS选择器来获取DOM元素

(1)选择匹配的第一个元素

语法:

document.querySelector('css选择器')
(2)选择匹配的多个元素

语法:

document.querySelectorAll('css选择器')

得到的是一个伪数组:

  • 有长度有索引号的数组
  • 但是没有pop()push()等数组方法
  • 想要得到里面的每一个对象,则需要遍历(for)的方式获得。
    // 1. 获取匹配的第一个元素// const box = document.querySelector('div')// const box = document.querySelector('.box')// console.log(box)// const nav = document.querySelector('#nav')// console.log(nav)// nav.style.color = 'red'// 1. 我要获取第一个小 ulli// const li = document.querySelector('ul li:first-child')// console.log(li)// 2. 选择所有的小li// const lis = document.querySelectorAll('ul li')// console.log(lis)// 1.获取元素const lis = document.querySelectorAll('.nav li')// console.log(lis)for (let i = 0; i < lis.length; i++) {console.log(lis[i]) // 每一个小li对象}

2、其他获取DOM元素方法

    //根据id获取一个元素document.getElementById('nav')// 根据标签获取一类元素获取页面所有divdocument.getElementsByTagName('div ')//根据类名获取元素获取页面所有类名为w的document.getElementsByClassName('w')

三、操作元素内容

1、元素innerText 属性

  • 将文本内容添加/更新到任意标签位置
  • 显示纯文本,不解析标签

2、元素innerHTML 属性

  • 将文本内容添加/更新到任意标签位置
  • 会解析标签,多标签建议使用模板字符

示例代码如下:

<div class="box">我是文字的内容</div><script>// const obj = {//   name: 'pink'// }// console.log(obj.name)// obj.name = 'red'// 1. 获取元素const box = document.querySelector('.box')// 2. 修改文字内容  对象.innerText 属性// console.log(box.innerText)  // 获取文字内容// // box.innerText = '我是一个盒子'  // 修改文字内容// box.innerText = '<strong>我是一个盒子</strong>'  // 不解析标签// 3. innerHTML 解析标签console.log(box.innerHTML)// box.innerHTML = '我要更换'box.innerHTML = '<strong>我要更换</strong>'</script>

四、操作元素属性

1、操作元素常用属性

  • 还可以通过 JS 设置/修改标签元素属性,比如通过 src更换图片
  • 最常见的属性比如:href、title、src等
  • 语法:

对象.属性 = 值

(1)图片随机更换

需求:当我们刷新页面,页面中的图片随机显示不同的图片

①:随机显示,则需要用到随机函数

②:更换图片需要用到图片的 src 属性,进行修改

示例代码如下:

  <img src="./images/1.webp" alt=""><script>// 取到 N ~ M 的随机整数function getRandom(N, M) {return Math.floor(Math.random() * (M - N + 1)) + N}// 1. 获取图片对象const img = document.querySelector('img')// 2. 随机得到序号const random = getRandom(1, 6)// 3. 更换路径img.src = `./images/${random}.webp`</script>

2、操作元素样式属性

(1)通过 style 属性操作CSS
  • 语法:

对象.style.样式属性 = 值

示例代码如下:

    // 1. 获取元素const box = document.querySelector('.box')//2. 修改样式属性 对象.style.样式属性 = '值'  别忘了跟单位box.style.width = '300px'// 多组单词的采取 小驼峰命名法box.style.backgroundColor = 'hotpink'box.style.border = '2px solid blue'box.style.borderTop = '2px solid red'
案例:页面随机更换背景图片

需求:当我们刷新页面,页面中的背景图片随机显示不同的图片

示例代码如下:

  <style>body {background: url(./images/desktop_1.jpg) no-repeat top center/cover;}</style><script>// console.log(document.body)// 取到 N ~ M 的随机整数function getRandom(N, M) {return Math.floor(Math.random() * (M - N + 1)) + N}// 随机数const random = getRandom(1, 10)document.body.style.backgroundImage = `url(./images/desktop_${random}.jpg)`</script>

(2)操作类名(className) 操作CSS
  • 如果修改的样式比较多,直接通过style属性修改比较繁琐,我们可以通过借助于css类名的形式。
  • 语法:

元素.className = ' active '

    // 1. 获取元素const div = document.querySelector('div')// 2.添加类名  class 是个关键字 我们用 classNamediv.className = 'nav box'

(3)通过 classList 操作类控制CSS
  • 为了解决className 容易覆盖以前的类名,我们可以通过classList方式追加和删除类名
  • 语法:
    // 通过classList添加// 1. 获取元素const box = document.querySelector('.box')// 2. 修改样式// 2.1 追加类 add() 类名不加点,并且是字符串// box.classList.add('active')// 2.2 删除类  remove() 类名不加点,并且是字符串// box.classList.remove('box')// 2.3 切换类  toggle()  有还是没有啊, 有就删掉,没有就加上box.classList.toggle('active')

注意:使用 className 和classList的区别?

  • 修改大量样式的更方便
  • 修改不多样式的时候方便
  • classList 是追加和删除不影响以前类名

3、操作 表单元素属性

  • 表单很多情况,也需要修改属性,比如点击眼睛,可以看到密码,本质是把表单类型转换为文本框
  • 正常的有属性有取值的 跟其他的标签属性没有任何区别
  • 获取:DOM对象.属性名 
  • 设置:DOM对象.属性名 = 新值
  • 表单属性中添加就有效果,移除就没有效果,一律使用布尔值表示 如果为true 代表添加了该属性 如果是false 代 表移除了该属性
  • 比如: disabled、checked、selected

示例代码如下:

// 1 获取元素// const uname = document.querySelector('input')// 2. 获取值  获取表单里面的值 用的  表单.value// console.log(uname.value) // 电脑// console.log(uname.innerHTML)  innertHTML 得不到表单的内容// 3. 设置表单的值// uname.value = '我要买电脑'// console.log(uname.type)// uname.type = 'password'// 1. 获取const ipt = document.querySelector('input')// console.log(ipt.checked)  // false   只接受布尔值ipt.checked = true// ipt.checked = 'true'  // 会选中,不提倡  有隐式转换// 1.获取const button = document.querySelector('button')// console.log(button.disabled)  // 默认false 不禁用button.disabled = true   // 禁用按钮

4、自定义属性

  • 标准属性:标签天生自带的属性 比如class id title等, 可以直接使用点语法操作比如: disabled、checked、 selected
  • 自定义属性:在html5中推出来了专门的data-自定义属性

在标签上一律以data-开头

在DOM对象上一律以dataset对象方式获

示例代码如下:

  <div data-id="1" data-spm="不知道">1</div><div data-id="2">2</div><script>const one = document.querySelector('div')console.log(one.dataset.id)  // 1console.log(one.dataset.spm)  // 不知道</script>

五、定时定时器-间歇函数

1、定时器函数介绍

  • 网页中经常会需要一种功能:每隔一段时间需要自动执行一段代码,不需要我们手动去触发 l
  • 例如:网页中的倒计时
  • 要实现这种需求,需要定时器函数
  • 定时器函数有两种,今天我先讲间歇函数

2、定时器函数基本使用

(1)开启定时器
setInterval(函数, 间隔时间)
  • 作用:每隔一段时间调用这个函数
  • 间隔时间单位是毫秒
(2)关闭定时器
 let 变量名 = setInterval(函数,间隔时间)clearInterval(变量名)

3、阅读注册协议案例

需求:按钮60秒之后才可以使用(时间可以修改)

分析:

①:开始先把按钮禁用(disabled 属性)

②:一定要获取元素

③:函数内处理逻辑

  • 秒数开始减减
  • 按钮里面的文字跟着一起变化
  • 如果秒数等于0 停止定时器 里面文字变为 同意 最后

示例代码如下:

<textarea name="" id="" cols="30" rows="10">用户注册协议欢迎注册成为京东用户!在您注册过程中,您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议,请您务必仔细阅读、充分理解协议中的条款内容后再点击同意(尤其是以粗体或下划线标识的条款,因为这些条款可能会明确您应履行的义务或对您的权利有所限制)。【请您注意】如果您不同意以下协议全部或任何条款约定,请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息,阅读并点击同意上述协议且完成全部注册流程后,即表示您已充分阅读、理解并接受协议的全部内容,并表明您同意我们可以依据协议内容来处理您的个人信息,并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方(详情查看</textarea><br><button class="btn" disabled>我已经阅读用户协议(5)</button><script>// 1. 获取元素const btn = document.querySelector('.btn')// console.log(btn.innerHTML)  butto按钮特殊用innerHTML// 2. 倒计时let i = 5// 2.1 开启定时器let n = setInterval(function () {i--btn.innerHTML = `我已经阅读用户协议(${i})`if (i === 0) {clearInterval(n)  // 关闭定时器// 定时器停了,我就可以开按钮btn.disabled = falsebtn.innerHTML = '同意'}}, 1000)</script>

4、轮播图定时器

需求:每隔一秒钟切换一个图片

分析:

①:准备一个数组对象,里面包含详细信息(素材包含)

②:获取元素

③:设置定时器函数

  • 设置一个变量++
  • 找到变量对应的对象
  • 更改图片、文字信息
  • 激活小圆点:移除上一个高亮的类名,当前变量对应的小圆点添加类

④:处理图片自动复原从头播放(放到变量++后面,紧挨)

  • 如果图片播放到最后一张, 就是大于等于数组的长度则把变量重置为0

示例代码如下:

    // 1. 获取元素 const img = document.querySelector('.slider-wrapper img')const p = document.querySelector('.slider-footer p')let i = 0  // 信号量 控制图片的张数// 2. 开启定时器// console.log(sliderData[i])  拿到对应的对象啦setInterval(function () {i++// 无缝衔接位置  一共八张图片,到了最后一张就是 8, 数组的长度就是 8if (i >= sliderData.length) {i = 0}// console.log(i)// console.log(sliderData[i])// 更换图片路径  img.src = sliderData[i].url// 把字写到 p里面p.innerHTML = sliderData[i].title// 小圆点// 先删除以前的activedocument.querySelector('.slider-indicator .active').classList.remove('active')// 只让当前li添加activedocument.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')}, 1000)

这篇关于JavaScript学习文档(7):Web API、获取DOM对象、操作元素内容、元素属性、定时器-间歇函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1110484

相关文章

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。