【前端教程】JavaScript DOM 操作实战案例详解

案例1:操作div子节点并修改样式与内容

功能说明

获取div下的所有子节点,设置它们的背景颜色为红色;如果是p标签,将其内容设置为"我爱中国"。

实现代码

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><style>a{text-decoration: none;}</style><script>window.onload=function(){// 用getElementsByTagName标签选择器获取div下的所有的元素节点var ziJieDianDivShuZu = document.getElementsByTagName("div")[0].children;// 用for of遍历元素节点,用.style.backgroundColor将每个节点的背景颜色修改为红色for(var i of ziJieDianDivShuZu){i.style.backgroundColor="red";}// 标签选择器可以获取div下的所有的标签,所以用标签选择器去获取div下的所有的p标签var jieDianPShuZu=document.getElementsByTagName("div")[0].getElementsByTagName("p");// 遍历得到的p数组,让每个p内容修改为我爱中国for(var i of jieDianPShuZu){i.innerHTML="我爱中国";}}</script>
</head>
<body><div><img src="./img/1.jpg" width="100px" height="100px"><a href="#">a href诗书画唱超链接</a><p>P点赞</p><ul><li>li投币</li></ul><p>p大家好</p></div>
</body>
</html>

关键技术点解析

  1. 使用getElementsByTagName("div")[0]获取页面中第一个div元素
  2. 通过children属性获取div的所有子元素节点
  3. 使用for of循环遍历子节点,通过style.backgroundColor设置背景颜色
  4. 针对p标签,使用getElementsByTagName("p")单独获取,再通过innerHTML修改内容

案例2:UL列表隔行换色效果

功能说明

获取ul下的所有子节点,实现鼠标移入时li元素的背景颜色隔行换色效果。

实现代码

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><style>ul{list-style: none;width: 666px; height: 23px; margin: 0px auto;text-align: center;}ul li{float: left;width:100px ;background-color: yellow;}ul li a{text-decoration: none;}</style><script>window.onload=function(){// 用标签选择器把ul等标签看作重上到下排序的数组,获取ul的下标为0的第一个的内容var ulFirstNeiRong=document.getElementsByTagName("ul")[0];// 分别获取奇数和偶数项的li元素var jiShuZu=ulFirstNeiRong.getElementsByClassName("jiID");var ouShuZu=ulFirstNeiRong.getElementsByClassName("ouID");// 为奇数项添加鼠标事件for(var i of jiShuZu){i.onmouseover=function(){this.style.backgroundColor="red";}i.onmouseout=function(){this.style.backgroundColor="yellow";}}// 为偶数项添加鼠标事件for(var i of ouShuZu){i.onmouseover=function(){this.style.backgroundColor="green";}i.onmouseout=function(){this.style.backgroundColor="yellow";}}}</script>
</head>
<body><ul><!--jiID:奇ID,ouID:偶ID--><li class="jiID"><a href="#">诗书画唱</a></li><li class="ouID"><a href="#"> UP主</a></li><li class="jiID"><a href="#">三连</a></li><li class="ouID"><a href="#">关注</a></li></ul>
</body>
</html>

关键技术点解析

  1. 使用getElementsByClassName按类名获取不同的li元素
  2. 为元素添加onmouseoveronmouseout事件实现鼠标悬停效果
  3. 通过this关键字引用当前触发事件的元素
  4. 使用CSS float属性实现水平菜单布局

案例3:节点类型统计

功能说明

制作一级菜单,当鼠标移动到ul上时,在div中显示ul包含的子节点、元素节点、属性节点和文本节点的数量。

方法一实现代码

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><style>ul {list-style: none;width: 666px;height: 23px;margin: 0px auto;text-align: center;}ul li {float: left;width: 100px;background-color: yellow;}ul li a {text-decoration: none;}div {width: 200px;height: 200px;border: 1px solid red;margin: 0px auto;}</style><script>window.onload = function() {// 获取第一个ul元素var ulFirstNeiRong = document.getElementsByTagName("ul")[0];// 获取ul的下一个兄弟元素divvar divAllNeiRong = ulFirstNeiRong.nextElementSibling;// 为ul添加鼠标移入事件ulFirstNeiRong.onmouseover = function() {// 子节点总数var ziJieDanShuZuZongChangDu = ulFirstNeiRong.childNodes.length;// 元素节点总数var yuanSuJieDianShuZuZongChangDu = ulFirstNeiRong.children.length;// 属性节点总数var shuXingJieDianShuZuZongChangDu = ulFirstNeiRong.attributes.length;// 统计文本节点数量var wenBenJieDianShuZuZongChangDu = 0;var allJieDianShuZu = ulFirstNeiRong.childNodes;for(var i of allJieDianShuZu) {// 节点类型为3表示是文本节点if(i.nodeType == 3) {wenBenJieDianShuZuZongChangDu++;}}// 在div中显示统计结果divAllNeiRong.innerHTML = "子节点" + ziJieDanShuZuZongChangDu + "个<br>元素节点" + yuanSuJieDianShuZuZongChangDu +"个<br>属性节点" + shuXingJieDianShuZuZongChangDu + "个<br>文本节点" + wenBenJieDianShuZuZongChangDu + "个";}}</script>
</head>
<body><ul><li><a href="#">诗书画唱</a></li><li><a href="#">UP主</a></li><li><a href="#">三连</a></li><li><a href="#">关注</a></li></ul><div></div>
</body>
</html>

关键技术点解析

  1. childNodes属性获取所有类型的子节点(包括文本节点、元素节点等)
  2. children属性只获取元素类型的子节点
  3. attributes属性获取元素的所有属性节点
  4. nodeType属性判断节点类型(3表示文本节点)
  5. nextElementSibling获取下一个兄弟元素

案例4:图片轮播效果

功能说明

实现图片自动轮播效果,鼠标移入时停止轮播,鼠标移出时继续轮播。

实现代码

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><script>// 页面加载完成后执行window.onload=function(){// 图片路径数组window.imgShuZu = ["./img/1.jpg", "./img/2.jpg", "./img/3.jpg"];// 控制图片的索引下标window.indexXiaBiao = 0;// 获取img元素window.img = document.getElementsByTagName("img")[0];// 定时器变量window.start = null;// 鼠标移入时停止轮播window.img.onmouseover = function() {clearInterval(window.start);}// 鼠标移出时继续轮播window.img.onmouseout = function() {// 每666毫秒执行一次gaiBianFunction函数window.start = setInterval(gaiBianFunction, 666);}}// 切换图片的函数function gaiBianFunction() {// 控制索引下标,实现循环效果if (window.indexXiaBiao <= 2) {indexXiaBiao++;}if (window.indexXiaBiao > 2) {indexXiaBiao = 0;}// 切换图片window.img.src = window.imgShuZu[window.indexXiaBiao];}</script>
</head>
<body><img src="./img/1.jpg" width="666px" height="666px" />
</body>
</html>

关键技术点解析

  1. 使用setInterval创建定时器实现自动轮播
  2. 使用clearInterval清除定时器实现停止轮播
  3. 通过控制数组索引实现图片循环切换
  4. 全局变量存储图片路径、当前索引和定时器ID
  5. 鼠标事件onmouseoveronmouseout控制轮播状态

总结

以上四个案例涵盖了DOM操作的核心知识点:

  • 元素获取:getElementsByTagNamegetElementsByClassName
  • 节点操作:childNodeschildrenattributes等属性
  • 样式修改:通过style属性修改元素样式
  • 事件处理:鼠标事件、定时器事件等
  • 内容修改:innerHTML属性修改元素内容

这些基础操作是前端开发的重要基石,掌握它们可以实现各种交互效果和动态页面功能。在实际开发中,可以根据需求灵活组合这些技术,创造出更丰富的用户体验。

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

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

相关文章

qiankun+vite+react配置微前端

微前端框架&#xff1a;qiankun。 主应用&#xff1a;react19vite7&#xff0c;子应用1&#xff1a;react19vite7&#xff0c;子应用2 &#xff1a;react19vite7 一、主应用 1. 安装依赖 pnpm i qiankun 2. 注册子应用 (1) 在src目录下创建个文件夹&#xff0c;用来存储关于微…

git: 取消文件跟踪

场景&#xff1a;第一次初始化仓库的时候没有忽略.env或者node_modules&#xff0c;导致后面将.env加入.gitignore也不生效。 取消文件跟踪&#xff1a;如果是因为 node_modules 已被跟踪导致忽略无效&#xff0c; 可以使用命令git rm -r --cached node_modules来删除缓存&…

开讲啦|MBSE公开课:第五集 MBSE中期设想(下)

第五集 在本集课程中&#xff0c;刘玉生教授以MBSE建模工具选型及二次定制开发为核心切入点&#xff0c;系统阐释了"为何需要定制开发"与"如何实施定制开发"的实践逻辑&#xff0c;并提炼出MBSE中期实施的四大核心要素&#xff1a;高效高质建摸、跨域协同…

CSDN个人博客文章全面优化过程

两天前达到博客专家申请条件&#xff0c;兴高采烈去申请博客专家&#xff1a; 结果今天一看&#xff0c;申请被打回了&#xff1a; 我根据“是Yu欸”大神的博客&#xff1a; 【2024-完整版】python爬虫 批量查询自己所有CSDN文章的质量分&#xff1a;附整个实现流程_抓取csdn的…

Websocket的Key多少个字节

在WebSocket协议中&#xff0c;握手过程中的Sec-WebSocket-Key是一个由客户端生成的随机字符串&#xff0c;用于安全地建立WebSocket连接。这个Sec-WebSocket-Key是基于Base64编码的&#xff0c;并且通常由客户端在WebSocket握手请求的头部字段中发送。根据WebSocket协议规范&a…

SVT-AV1编码器中实现WPP依赖管理核心调度

一 assign_enc_dec_segments 函数。这个函数是 SVT-AV1 编码器中实现波前并行处理&#xff08;WPP&#xff09; 和分段依赖管理的核心调度器之一。//函数功能&#xff1a;分配编码解码段任务//返回值Bool//True 成功分配了一个段给当前线程&#xff0c;调用者应该处理这个段//F…

直接让前端请求代理到自己的本地服务器,告别CV报文到自己的API工具,解放双手

直接使用前端直接调用本地服务器&#xff0c;在自己的浏览器搜索插件proxyVerse&#xff0c;类似的插件应该还有一些&#xff0c;可以选择自己喜欢的这类插件可以将浏览器请求&#xff0c;直接转发到本地服务器&#xff0c;这样在本地调试的时候&#xff0c;不需要前端项目&…

Golang Goroutine 与 Channel:构建高效并发程序的基石

在当今这个多核处理器日益普及的时代&#xff0c;利用并发来提升程序的性能和响应能力已经成为软件开发的必然趋势。而Go语言&#xff0c;作为一门为并发而生的语言&#xff0c;其设计哲学中将“并发”置于核心地位。其中&#xff0c;Goroutines 和 Channels 是Go实现并发编程的…

17 C 语言宏进阶必看:从宏替换避坑到宏函数用法,不定参数模拟实现一次搞定

预处理详解1. 预定义符号//C语⾔设置了⼀些预定义符号&#xff0c;可以直接使⽤&#xff0c;预定义符号也是在预处理期间处理的。 __FILE__ //进⾏编译的源⽂件--预处理阶段被替换成指向文件名字符串的指针--char* 类型的变量 __LINE__ //⽂件当前的⾏号 --预处理阶段替换成使用…

深入剖析 HarmonyOS ArkUI 声明式开发:状态管理艺术与最佳实践

好的&#xff0c;请看这篇关于 HarmonyOS ArkUI 声明式开发范式与状态管理的技术文章。 深入剖析 HarmonyOS ArkUI 声明式开发&#xff1a;状态管理艺术与最佳实践 引言 随着 HarmonyOS 4、5 的广泛应用以及面向未来的 HarmonyOS NEXT&#xff08;API 12&#xff09;的发布&…

Qwen-Code安装教程

一、概述Qwen Code 是一个强大的基于命令行、面向开发者的 AI 工作流工具&#xff0c;改编自 Gemini CLI&#xff0c;专门针对 Qwen3-Coder 模型进行了优化。它专门为代码理解、代码重构、自动化工作流、Git 操作等场景设计&#xff0c;让你的开发工作变得更高效、更智能。它既…

老师傅一分钟精准判断电池好坏!就靠这个神器!

在汽车维修与保养领域&#xff0c;蓄电池状态的准确判断一直是技术人员面临的重要挑战。传统的电压测量方法只能反映表面现象&#xff0c;无法深入评估蓄电池的实际健康状态。Midtronics MDX-P300蓄电池及电气系统测试仪作为专业级诊断设备&#xff0c;通过电导测试技术和多系统…

Axure笔记

Axure介绍 快速原型的软件 应用场景&#xff1a;拉投资、给项目团队、销售演示、项目投标、内部收集反馈、教学 软件安装与汉化 汉化&#xff1a;复制lang文件夹和三个dll 软件的基础功能 基本布局&#xff1a;菜单栏、工具栏、页面和摘要、元件和母版、画布、样式交互和说明设…

Pytorch Yolov11 OBB 旋转框检测+window部署+推理封装 留贴记录

Pytorch Yolov11 OBB 旋转框检测window部署推理封装 留贴记录 上一章写了下【Pytorch Yolov11目标检测window部署推理封装 留贴记录】&#xff0c;这一章开一下YOLOV11 OBB旋转框检测相关的全流程&#xff0c;有些和上一章重复的地方我会简写&#xff0c;要两篇结合着看&#x…

《Keil 开发避坑指南:STM32 头文件加载异常与 RTE 配置问题全解决》

《Keil 开发避坑指南&#xff1a;STM32 头文件加载异常与 RTE 配置问题全解决》文章提纲一、引言• 简述 Keil 在 STM32 开发中的核心地位&#xff0c;指出头文件加载和 RTE&#xff08;运行时环境&#xff09;配置是新手常遇且关键的问题&#xff0c;说明本文旨在为开发者提…

TortoiseGit 2.4.0.0 64位安装教程(附详细步骤和Git配置 附安装包)

本教程详细讲解 ​TortoiseGit 2.4.0.0 64位版本​ 的完整安装步骤&#xff0c;包括如何运行 ​TortoiseGit-2.4.0.0-64bit.msi​ 安装包、设置安装路径、关联 Git 环境&#xff0c;以及安装后的基本配置方法&#xff0c;适合 Windows 用户快速上手 Git 图形化管理工具。 一、…

大数据毕业设计选题推荐-基于大数据的高级大豆农业数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

学习机器学习能看哪些书籍

关注B站可以观看更多实战教学视频&#xff1a;hallo128的个人空间 在机器学习与深度学习的知识海洋中&#xff0c;选择合适的书籍往往是入门和进阶的关键。以下四本经典著作各具特色&#xff0c;覆盖了从基础理论到实践应用的多个维度&#xff0c;无论你是初学者还是有一定基础…

Unity通过Object学习原型模式

原型模式简述 依据现有的实例生成新的实例 Object的实例化方法 Object.Instantiate 克隆 original 对象并返回克隆对象 Unity中的实例&#xff1a;预制体或场景中的游戏对象 示例 方法1&#xff1a;手动创建对象并添加组件 方法2&#xff1a;使用实例化方法&#xff0c;实…

【踩坑记录】Unity 项目中 PlasticSCM 掩蔽列表引发的 文件缺失问题排查与解决

问题描述&#xff1a; Plastic SCM 签入时&#xff0c;弹窗提示“项xxx在该工作区中不存在” Unity 项目中 PlasticSCM 掩蔽列表引发的 文件缺失问题排查与解决 文章目录Unity 项目中 PlasticSCM 掩蔽列表引发的 文件缺失问题排查与解决一、前言二、Unity 与 .meta 文件机制1. …