当前位置: 首页 > news >正文

【前端教程】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.xdnf.cn/news/1471231.html

相关文章:

  • javafx笔记
  • 有序数组,距离目标最近的k个数 二分查找
  • 2025 年高教社杯全国大学生数学建模竞赛C 题 NIPT 的时点选择与胎儿的异常判定详解(一)
  • 数据库基础知识——聚合函数、分组查询
  • ResNet 迁移学习---加速深度学习模型训练
  • 瑞芯微RV1126目标识别算法Yolov8的部署应用
  • 关于kubernetes和docker版本的一些总结
  • 工业设备管理软件与AI_HawkEye智能运维平台_璞华大数据
  • 自定义格式化数据(BYOFD)(81)
  • Python快速入门专业版(五):从 print 到交互:Python 解释器与 IDLE 的基础使用
  • 如何在序列水平上简单分析一个新蛋白质序列(novel protein sequence)
  • AM J BOT | 黄芪稳健骨架树构建
  • 360° 拖动旋转的角度计算原理
  • LangChain: Memory
  • 嵌入式学习日记(41)串口
  • 数据库(基础操作)
  • 载流子寿命
  • 基于FPGA实现CRC校验码算法(以MODBUS中校验码要求为例)verilog代码+仿真验证
  • Python命令行选项(flags)解析
  • 漫画布局面板设计系统
  • 事务管理的选择:为何 @Transactional 并非万能,TransactionTemplate 更值得信赖
  • 从Java全栈到前端框架:一位程序员的实战之路
  • NestJS 整合 Redis 特性详解
  • 2025年统计与数据分析领域专业认证发展指南
  • [TryHackMe]Wordpress: CVE-2021-29447(wp漏洞利用-SSRF+WpGetShell)
  • harmony 中集成 tuanjie/unity
  • Leetcode每日一练--20
  • ESP-IDF串口中断接收
  • 概率论第二讲——一维随机变量及其分布
  • 广告投放全链路解析