【JavaScript】合体期功法——DOM(一)

目录

  • DOM
    • Web API 基本概念
      • 作用和分类
    • 什么是 DOM
    • DOM 树
      • DOM 对象
    • 获取 DOM 元素
      • 根据 CSS 选择器来获取 DOM 元素
        • 选择匹配的第一个元素
        • 选择匹配的多个元素
      • 其他获取 DOM 元素方法
    • 修改元素的内容
      • 对象.innerText 属性
      • 对象.innerHTML 属性
      • 案例:年会抽奖
    • 修改元素属性
      • 修改元素常用属性
      • 修改元素样式属性
        • 通过 style 属性操作 CSS
        • 利用 className 操作 CSS
        • 通过 classList 操作类以控制 CSS
      • 案例:轮播图(初级)

DOM

Web API 基本概念

作用和分类

作用:使用 JavaScript 去操作 html 和浏览器

分类:DOM(文档对象模型)、BOM(浏览器对象模型)

什么是 DOM

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 元素

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

选择匹配的第一个元素

语法:

document.querySelector('CSS选择器')

代码示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="shortcut icon" href="#" /><style>.box{width: 100px;height: 100px;}</style>
</head>
<body><div class="box">123</div><div class="box">abc</div><p id="nav">导航栏</p><script>const box1 = document.querySelector('div');console.dir(box1);const box2 = document.querySelector('.box');console.dir(box2);const nav = document.querySelector('#nav');console.dir(nav);</script>
</body>
</html>

结果如下:

屏幕录制 2025-03-28 173922

注意事项:

  • 参数:包含一个或多个有效的 CSS 选择器字符串
  • 返回值:CSS 选择器匹配的第一个元素,一个 HTMLElement 对象;如如果没有匹配到,则返回 null
选择匹配的多个元素

语法:

document.querySelectorAll('CSS选择器')

代码示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="shortcut icon" href="#" /><style>.box{width: 100px;height: 100px;}</style>
</head>
<body><div class="box">123</div><div class="box">abc</div><ul><li></li><li></li><li></li><li></li><li></li></ul><script>const box = document.querySelectorAll('div');console.dir(box);const lis = document.querySelectorAll('ul li');console.dir(lis);</script>
</body>
</html>

结果如下:

在这里插入图片描述

注意事项:

  • 参数:包含一个或多个有效的 CSS 选择器字符串
  • 返回值:CSS 选择器匹配的 NodeList 对象集合
  • 得到一个伪数组:
    • 有长度有索引号的数组
    • 但是没有 pop()、push() 等数组方法
    • 想要得到里面的每一个对象,则需遍历获得
  • 就算只有一个元素,querySelectorAll() 获取的也是一个伪数组

代码示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="shortcut icon" href="#" /><style>.box{width: 100px;height: 100px;}</style>
</head>
<body><ul class="nav"><li>111</li><li>222</li><li>333</li><li>444</li><li>555</li></ul><script>const lis = document.querySelectorAll('.nav li');console.dir(lis);for(let i = 0; i < lis.length; i++){console.dir(lis[i]); }</script>
</body>
</html>

结果如下:

在这里插入图片描述

其他获取 DOM 元素方法

根据 id 获取一个元素

document.getElementById('id选择器')

根据标签获取一类元素,获取所有 div

document.getElementsByTagName('div')

根据类名获取元素,获取页面所有类名为 w 的

document.getElementsByClassName('w')

修改元素的内容

对象.innerText 属性

将文本内容添加/更新到任意标签位置

显示纯文本,不解析标签

代码示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><span class="info">看客老爷真的很帅</span><script>const info = document.querySelector('.info')// 获取标签内部的文字内容console.log(info.innerText)// 修改标签内部的文字内容info.innerText = '看客老爷不是一般的帅'   console.log(info.innerText)// 不会解析标签info.innerText = '<h1>看客老爷</h1>'console.log(info.innerText)</script>
</body>
</html>

结果如下:

在这里插入图片描述

对象.innerHTML 属性

将文本内容添加/更新到任意标签位置

会解析标签,多标签建议使用模板字符

代码示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><span class="info">看客老爷真的很帅</span><script>const info = document.querySelector('.info')// 获取标签内部的文字内容console.log(info.innerHTML)// 修改标签内部的文字内容info.innerHTML = '看客老爷不是一般的帅'   console.log(info.innerHTML)// 会解析标签info.innerHTML = '<h1>看客老爷</h1>'console.log(info.innerHTML)</script>
</body>
</html>

结果如下:

在这里插入图片描述

案例:年会抽奖

代码示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.wrapper {width: 840px;height: 420px;background: url(./img/1.jpg) no-repeat center / cover;padding : 100px 250px;box-sizing: border-box;}</style>
</head>
<body><div class="wrapper"><strong>年会抽奖</strong><h1>一等奖:<span id="one">???</span></h1><h2>二等奖:<span id="two">???</span></h2><h3>三等奖:<span id="three">???</span></h3></div><script>const person = ['Jack','Tom','Jerry','Mary','Mike','Lily','Rose'];const prizeIds = ['one', 'two', 'three'];// 使用 for 循环来简化代码for (let i = 0; i < prizeIds.length; i++) {const random = Math.floor(Math.random() * person.length);const prizeElement = document.querySelector(`#${prizeIds[i]}`);prizeElement.innerHTML = person[random];person.splice(random, 1);}</script>
</body>
</html>

结果如下:

在这里插入图片描述

修改元素属性

修改元素常用属性

可通过 JS 设置 / 修改标签元素属性,例如利用 src 更换图片。

常见属性:hreftitlesrc 等。

语法:对象.属性 = 值

代码示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><img src="./img/1.png" alt=""><script>// 获取图片const img = document.querySelector('img')// 修改图片对象的src属性img.src = './img/2.png'// 修改图片的title属性img.title = '这是第二张图片'</script>
</body>
</html>

结果如下:

在这里插入图片描述

修改元素样式属性

可通过 JS 设置 / 修改标签元素样式属性

  • 例如轮播图小圆点自动更换颜色样式
  • 点击按钮滚动图片(涉及图片位置 left 等样式调整)
通过 style 属性操作 CSS

语法:对象.style.样式属性 = '值'

代码示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.box {width: 200px;height: 200px;background-color: black; }</style>
</head>
<body><div class="box"></div><script>const box = document.querySelector('.box');// 修改样式属性box.style.width = '300px';box.style.height = '100px';box.style.backgroundColor = 'red';box.style.borderRadius = '50px'box.style.border = '10px solid black'</script>
</body>
</html>

结果如下:

在这里插入图片描述

注意事项:

  • 修改样式通过 style 属性引出
  • 如果属性有 - 连接符,需要转换为小驼峰命名法
  • 赋值的时候,不要忘记加 CSS 单位
利用 className 操作 CSS

场景:修改样式较多时,借助 CSS 类名比直接通过 style 属性修改更便捷

语法元素.className = '类名'(示例:active 为 CSS 类名时,元素.className = 'active'

代码示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>div {width: 200px;height: 200px;background-color: black; }.box{width: 300px;height: 100px;background-color: red;border-radius: 50px;border: 10px solid black;}</style>
</head>
<body><div></div><script>const div = document.querySelector('div')div.className = 'box'</script>
</body>
</html>

结果如下:

在这里插入图片描述

注意事项:

  • class 是关键字,故使用 className 代替
  • className 会用新值替换旧值,若需添加类,需保留原有类名
通过 classList 操作类以控制 CSS

目的:为解决 className 易覆盖原有类名的问题,可通过 classList 追加或删除类名

语法:

  • 追加类:元素.classList.add('类名')
  • 删除类:元素.classList.remove('类名')
  • 切换类:元素.classList.toggle('类名')

代码示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.box {width: 200px;height: 200px;background-color: pink; text-align: center;}.first {width: 300px;height: 100px;}.second {background-color: red;border-radius: 50px;border: 10px solid black;}.third {font-size: 80px;}.forth {background-color: skyblue;/* 文字垂直居中 */line-height: 200px;}</style>
</head>
<body><div class="box">abcd</div><script>// 获取元素const box = document.querySelector('.box')// 添加类名box.classList.add('first','second','third')// 删除类名box.classList.remove('first')// 切换类名 —— 如果类名存在则删除,不存在则添加box.classList.toggle('forth')</script>
</body>
</html>

结果如下:

在这里插入图片描述

案例:轮播图(初级)

代码示例:

<!DOCTYPE html>
<!-- 声明 HTML 文档的语言为英语 -->
<html lang="en">
<head><!-- 设置文档的字符编码为 UTF-8 --><meta charset="UTF-8"><!-- 配置页面在不同设备上的视图 --><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- 设置页面的标题 --><title>Document</title><style>/* 全局设置,将所有元素的盒模型设置为 border-box */* {box-sizing: border-box;}/* 轮播图容器样式 */.slider {width: 280px;height: 400px;/* 隐藏超出容器的内容 */overflow: hidden;}/* 轮播图图片包装器样式 */.slider-wrapper {width: 100%;height: 320px;}/* 轮播图图片样式 */.slider-wrapper img {width: 100%;height: 100%;/* 将图片显示为块级元素 */display: block;}/* 轮播图底部区域样式 */.slider-footer {height: 80px;background-color: rgb(100, 67, 68);/* 设置内边距,下、左、右内边距为 12px */padding: 12px 12px 12px;/* 相对定位,为子元素的绝对定位提供参考 */position: relative;}/* 轮播图切换按钮容器样式 */.slider-footer .toggle {/* 绝对定位,位于父元素的右上角 */position: absolute;right: 0;top: 12px;/* 使用 flex 布局 */display: flex;}/* 轮播图切换按钮样式 */.slider-footer .toggle button {margin-right: 12px;width: 28px;height: 28px;/* 去除浏览器默认样式 */appearance: none;border: none;background: rgba(255, 255, 255, 0.1);color: #fff;border-radius: 4px;/* 鼠标悬停时显示指针样式 */cursor: pointer;}/* 轮播图切换按钮悬停样式 */.slider-footer .toggle button:hover {background: rgba(255, 255, 255, 0.2);}/* 轮播图底部区域文字样式 */.slider-footer p {margin: 0;color: #fff;font-size: 18px;margin-bottom: 10px;}/* 轮播图指示器列表样式 */.slider-indicator {margin: 0;padding: 0;/* 去除列表默认样式 */list-style: none;/* 使用 flex 布局,垂直居中对齐 */display: flex;align-items: center;}/* 轮播图指示器列表项样式 */.slider-indicator li {width: 8px;height: 8px;margin: 4px;border-radius: 50%;background: #fff;/* 设置透明度 */opacity: 0.4;cursor: pointer;}/* 激活状态的轮播图指示器列表项样式 */.slider-indicator li.active {width: 12px;height: 12px;/* 不透明 */opacity: 1;}</style>
</head>
<body><!-- 轮播图容器 --><div class="slider"><!-- 轮播图图片包装器 --><div class="slider-wrapper"><!-- 轮播图初始图片 --><img src="./img/1.png" alt=""></div><!-- 轮播图底部区域 --><div class="slider-footer"><!-- 显示轮播图名称的段落 --><p>假面骑士空我</p><!-- 轮播图指示器列表 --><ul class="slider-indicator"><!-- 指示器列表项 --><li></li><li></li><li></li><li></li><li></li></ul><!-- 轮播图切换按钮容器 --><div class="toggle"><!-- 上一张图片按钮 --><button class="prev">&lt;</button><!-- 下一张图片按钮 --><button class="next">&gt;</button></div></div></div><script>// 定义轮播图数据数组,包含图片路径、名称和对应的背景颜色let data = [{src:'./img/1.png',name:'假面骑士空我',color: 'rgb(100, 67, 68)'},{src:'./img/2.png',name:'假面骑士亚极陀',color: 'rgb(100, 67, 68)'},{src:'./img/3.png',name:'假面骑士龙骑',color: 'rgb(100, 67, 68)'},{src:'./img/4.png',name:'假面骑士555',color: 'rgb(100, 67, 68)'},{src:'./img/5.png',name:'假面骑士剑',color: 'rgb(100, 67, 68)'}]// 生成一个随机数,用于随机选择轮播图数据数组中的一项const random = Math.floor(Math.random() * data.length)// 获取轮播图图片元素const img = document.querySelector('.slider-wrapper img')// 修改图片的 src 属性,显示随机选择的图片img.src = data[random].src// 获取轮播图底部区域的段落元素const p = document.querySelector('.slider-footer p')// 修改段落的内容,显示随机选择的轮播图名称p.innerHTML = data[random].name// 获取轮播图底部区域元素const footer = document.querySelector('.slider-footer')// 修改底部区域的背景颜色,使用随机选择的颜色footer.style.backgroundColor = data[random].color// 获取对应的轮播图指示器列表项const li = document.querySelector(`.slider-indicator li:nth-child(${random + 1})`)// 为选中的指示器列表项添加 active 类,改变其样式li.classList.add('active')</script>
</body>
</html>

结果如下:

屏幕录制 2025-03-29 222527

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/74914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GAMMA数据处理(十)

今天向别人请教了一个问题&#xff0c;刚无意中搜索到了一模一样的问题 不知道这个怎么解决... ok 解决了 有一个GAMMA的命令可转换 但是很奇怪 完全对不上 转换出来的行列号 不知道为啥 再试试 是因为经纬度坐标的小数点位数 de as

Java入门知识总结——章节(二)

ps&#xff1a;本章主要讲数组、二维数组、变量 一、数组 数组是一个数据容器&#xff0c;可用来存储一批同类型的数据 &#x1f511;&#xff1a;注意 类也可以是一个类的数组 public class Main {public static class Student {String name;int age; // 移除 unsignedint…

动态IP:网络世界的“变色龙”如何改变你的在线体验?

你知道吗&#xff1f;有时候我觉得动态IP就像是网络世界里的“变色龙”。它不像静态IP那样一成不变&#xff0c;而是随时在变化&#xff0c;像是一个永远在换衣服的演员。你永远不知道它下一秒会变成什么样子&#xff0c;但正是这种不确定性&#xff0c;让它变得特别有趣。想象…

从24GHz到71GHz:Sivers半导体的广泛频率范围5G毫米波产品解析

在5G技术的浪潮中&#xff0c;Sivers半导体推出了创新的毫米波无线产品&#xff0c;为通信行业带来高效、可靠的解决方案。这些产品支持从24GHz到71GHz的频率&#xff0c;覆盖许可与非许可频段&#xff0c;适应高速、低延迟的通信场景。 5G通信频段的一点事儿及Sivers毫米波射频…

aocache:AOCache 新增功能深度解析:从性能监控到灵活配置的全方位升级

最近对aocache 进行了重要升级&#xff0c;最新版本0.6.0增加了几项新功能&#xff1a;性能分析日志&#xff0c;AOCache性能分析工具&#xff0c;切入点自定义配置&#xff0c;全局配置&#xff0c;本文详细说明这几项目新功能的作用和使用方式。 一、性能分析日志 需求背景…

Java EE 进阶:MyBatis-plus

MyBatis-plus的介绍 MyBatis-plus是MyBatis的增强工具&#xff0c;在MyBatis的基础上做出加强&#xff0c;只要MyBatis有的功能MyBatis-plus都有。 MyBatis-plus的上手 添加依赖 在我们创建项目的时候&#xff0c;我们需要添加MyBatis-plus和mysql的依赖 MyBatis-plus的依赖…

GitHub和Gitee上的一些AI项目

以下是GitHub和Gitee上的一些AI项目&#xff1a; GitHub上的AI项目 TensorFlow&#xff1a;一个端到端开源机器学习平台&#xff0c;包含大量工具和库&#xff0c;广泛应用于图像识别、自然语言处理等领域。PyTorch&#xff1a;由Facebook开发的开源深度学习框架&#xff0c;…

JavaScript网页设计高级案例:构建交互式图片画廊

JavaScript网页设计高级案例&#xff1a;构建交互式图片画廊 在现代Web开发中&#xff0c;交互式元素已成为提升用户体验的关键因素。本文将通过一个高级案例 - 构建交互式图片画廊&#xff0c;展示如何结合HTML和JavaScript创建引人入胜的网页应用。这个案例不仅涵盖了基础的…

Linux命令大全:从入门到高效运维

适合人群&#xff1a;Linux新手 | 运维工程师 | 开发者 目录 一、Linux常用命令&#xff08;每天必用&#xff09; 1. 文件与目录操作 2. 文件内容查看与编辑 二、次常用命令&#xff08;按需使用&#xff09; 1. 系统管理与监控 2. 网络与通信 3. 权限与用户管理 三、…

Windows 10/11 使用 VSCode + SSH 免密远程连接 Ubuntu 服务器(指定端口)

摘要&#xff1a; 本文详细介绍如何在 Windows 系统上通过 VSCode Remote-SSH 免密登录远程 Ubuntu 服务器&#xff08;SSH 端口 2202&#xff09;&#xff0c;避免每次输入密码的繁琐操作&#xff0c;提高开发效率。 1. 环境准备 本地系统&#xff1a;Windows 10/11远程服务…

一些需要学习的C++库:CGAL和Eysshot

写在前面&#xff1a; 从开始工作到现在&#xff0c;去过多家公司&#xff0c;多个行业&#xff0c; 虽然大部分时间在通信业&#xff0c;但也有其它的行业的工作没有做完&#xff0c;但也很感兴趣。每次想要研究一下时&#xff0c;总是想不起来。 这里写一些信息&#xff0c;…

蓝桥杯16天刷题计划一一Day01

蓝桥杯16天刷题计划一一Day01&#xff08;STL练习&#xff09; 作者&#xff1a;blue 时间&#xff1a;2025.3.26 文章目录 蓝桥杯16天刷题计划一一Day01&#xff08;STL练习&#xff09;[P1540 [NOIP 2010 提高组\] 机器翻译 - 洛谷 (luogu.com.cn)](https://www.luogu.com.…

相对位置2d矩阵和kron运算的思考

文章目录 1. 相对位置矩阵2d2. kron运算 1. 相对位置矩阵2d 在swin-transformer中&#xff0c;我们会计算每个patch之间的相对位置&#xff0c;那么我们看到有一连串的拉伸和相减&#xff0c;直接贴代码&#xff1a; import torch import torch.nn as nntorch.set_printoptio…

Redis 版本演进及主要新特性

Redis 版本发布历史 稳定版本时间线 Redis 2.6 (2012年)Redis 2.8 (2013年11月)Redis 3.0 (2015年4月) - 首次支持集群Redis 3.2 (2016年5月)Redis 4.0 (2017年7月)Redis 5.0 (2018年10月)Redis 6.0 (2020年4月)Redis 6.2 (2021年2月)Redis 7.0 (2022年4月) - 最新稳定版(截至…

HTML5 Geolocation(地理定位)学习笔记

一、HTML5 Geolocation简介 HTML5 Geolocation&#xff08;地理定位&#xff09;API用于获取用户的地理位置信息。通过这个API&#xff0c;可以获取用户的纬度、经度、海拔等信息。由于地理定位可能涉及用户隐私&#xff0c;因此只有在用户同意的情况下&#xff0c;才能获取其…

爱普生VG3225EFN压控晶振5G基站低噪声的解决方案

在 5G 通信网络的高速发展中&#xff0c;系统噪声的控制成为保障网络可靠性与数据吞吐量的关键。爱普生 VG3225EFN 压控晶振凭借其卓越的低噪声特性&#xff0c;成为 5G 基站时钟系统的理想选择。通过创新的技术设计&#xff0c;这款晶振不仅为基站提供了稳定的时钟基准&#x…

【问题解决】Linux安装conda修改~/.bashrc配置文件后,root 用户下显示 -bash-4.2#

问题描述 在Linux安装conda下的python环境时候&#xff0c;修改了~/.bashrc文件&#xff0c;修改完成后&#xff0c;再次进入服务器后&#xff0c;登录时候显示的不是正常的[rootlocalhost ~]#&#xff0c;而是-bash-4.2# 原因分析&#xff1a; 网上原因有&#xff1a;/root下…

机器学习knnlearn5

import numpy as np from os import listdir from sklearn.neighbors import KNeighborsClassifier as kNN# 此函数用于将一个32x32的文本文件转换为一个1x1024的一维向量 def img2vector(filename):"""将32x32的文本文件转换为1x1024的向量:param filename: 要…

git revert 用法实战:撤销一个 commit 或 merge

git revert 1 区别 • 常规的 commit &#xff08;使用 git commit 提交的 commit&#xff09; • merge commit 2 首先构建场景 master上的代码 dev开发分支上&#xff0c;添加一个a标签&#xff0c;并commit这次提交 切到master上&#xff0c;再次进行改动和提交 将de…

自然语言处理|高效法律助手:AI如何解析合同条款?

引言&#xff1a;法律 AI 的崛起 在数字化浪潮快速发展的今天&#xff0c;人工智能&#xff08;AI&#xff09;已不再是一个陌生的概念&#xff0c;它正以快速发展渗透到各个领域&#xff0c;法律行业也不例外。从智能合同审查到法律风险预测&#xff0c;AI 技术为法律工作带来…