HTML--JavaScript操作DOM对象

news2024/11/18 20:43:59

目录

本章目标

一.DOM对象概念

​编辑

  二.节点访问方法

 常用方法:

 层次关系访问节点

 三.节点信息

 四.节点的操作方法

操作节点的属性

 创建节点 

 删除替换节点 

五.节点操作样式

 style属性 

class-name属性

  六.获取元素位置

总结

本章目标

  1. 了解DOM的分类和节点间的关系
  2. 熟练使用JavaScript操作DOM节点
  • 访问DOM节点 能够熟练的进行节点的创建、添加、删除、替换等
  •  能够熟练的设置元素的样式
  •  能够灵活运用JavaScript获取元素位置的属性来完成网页效果

一.DOM对象概念

        在JavaScript中,DOM是JavaScript操作网页内容和结构的接口。DOM对象是HTML文档中的各个元素和节点的表示。通过DOM对象,我们可以访问和操作网页中的元素、属性和事件。

       DOM对象层次结构类似于一颗树,根节点是document对象,代表整个HTML文档。各个节点通过父子关系连接起来,每个节点都有自身的属性和方法。

  二.节点访问方法

 常用方法:

 层次关系访问节点

 访问步骤方法1:

  1. 通过document对象获取根元素节点。
  2. 使用根元素节点的方法和属性来访问其直接子节点。
  3. 遍历子节点列表,获取需要的节点。
  4. 使用节点的方法和属性来进一步访问其子节点或父节点。
  5. 重复步骤3和4,直到达到所需的节点。

访问步骤方法2:可以使用以下方法和属性来访问节点的层次关系:

 注:通过层次关系访问节点的前提是代码必须在一行,演示案例为方便演示未放一行。 

 

 

基础演示案例

<!DOCTYPE html>
<html>
	<head lang="en">
		<meta charset="utf-8">
		<title>访问节点</title>
		<style type="text/css">
			#father{width: 300px;height: 175px;border:2px solid grey;margin: 0 auto;}
			ul{list-style: none; line-height: 2;}
			a{text-decoration:none}
			#first{display: inline;}
			#first a{position: relative; left: 190px;}
			li{position: relative; left: -35px;font-style: oblique;}
		</style>
	</head>
	<body>
		<section id="news">
			<div id="father">
				<header>京东快报<div id="first"><a href="#">更多></a></div></header>
				<hr>
				<ul>
					<li><a href="#">京东无锡馆正式启动</a></li>
					<li><a href="#">99元抢平板!品牌配件199-100</a></li>
					<li><a href="#">节能领跑京东先行</a></li>
					<li><a href="#">高洁丝领券五折!</a></li>
				</ul>
			</div>	
		</section>	
	</body>

 

 层次关系演示案例

<script type="text/javascript">
		var newsdoc = document.getElementById("father");
		//innerHTML右边未赋值代表取出该标签中的元素并赋值给左边变量
		var message = newsdoc.lastElementChild.firstElementChild.innerHTML;
		window.alert(message);
</script>

 三.节点信息

基础演示案例 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<ul id="nodeList"><li>nodeName:节点名称</li><li>nodeValue:节点值</li><li>nodeType:节点类型</li></ul><p></p>
	</body>
	<script type="text/javascript">
		var nodes = document.getElementById("nodeList");
		var type1 = nodes.firstChild.nodeType;
		var type2 = nodes.firstChild.firstChild.nodeType;
		var name1 = nodes.firstChild.firstChild.nodeName;
		var value1 = nodes.firstChild.firstChild.nodeValue;
		document.write("节点&lt;li&gt;nodeName:节点名称&lt;/li&gt;的类型为:"+type1+"</br>");
		document.write("节点(nodeName:节点名称)的类型为:"+type2+"</br>");
		document.write("节点(nodeName:节点名称)的名称为:"+name1+"</br>");
		document.write("节点(nodeName:节点名称)的数值为:"+value1);
	</script>
</html>

 四.节点的操作方法

操作节点的属性

index.setAttribute("属性名","属性值"):在节点index中添加一个属性并给添加的属性赋值
 
index.getAttribute("属性名"):获取index节点中的属性名所对应的值

 通过操作节点的属性从而实现点击对应的按钮显示对应的图片

 演示案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
		    *{
				font-size: 12px; 
				font-family: "Arial", "微软雅黑"; 
				line-height: 25px;
				}
		    div{
				padding: 5px; text-align: center;
				}
		    div span{display: block;}
		    </style>
	</head>
	<body>
		<p>选择你喜欢的书:
			<input type="radio" name="book" onclick="book()">我和狗狗一起活下来
			<input type="radio" name="book" onclick="book()">灰霾来了怎么办
		</p>
		<div>
			<img src="" alt="" id="image" onclick="img()"/><span></span>
		</div>
		<script type="text/javascript">
			function book(){
				var imagedoc = document.getElementById("image");
				//getElementsByName("book"):选中所有name="book"的节点并返回一个集合赋值给booksdoc
				var booksdoc = document.getElementsByName("book");
				//booksdoc[0].checked:如果选择booksdoc[0](booksdoc集合中第一个节点)
				if(booksdoc[0].checked){
					//将属性名:src 属性值:WebProect/dog.jpg 赋值给==>imagedoc
					imagedoc.setAttribute("src","WebProect/dog.jpg");
					imagedoc.setAttribute("alt","我和狗狗一起活下来");
					imagedoc.nextSibling.innerHTML = "我和狗狗一起活下来";
				}else if(booksdoc[1].checked){
					imagedoc.setAttribute("src","WebProect (2)/mai.jpg");	
					imagedoc.setAttribute("alt","灰霾来了怎么办");
					imagedoc.nextSibling.innerHTML = "灰霾来了怎么办";														
				}
			}
			function img(){
				var messagealt = document.getElementById("image").getAttribute("alt");
				window.alert("该图片的alt属性值是==>"+messagealt);
			}
		</script>
	</body>
</html>
 创建节点 

点击"我和狗狗一起活下来"会再次生成一个同样的图片

点击"灰霾来了怎么办"窗口会进行弹窗

 
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
		    *{
				font-size: 12px; 
				font-family: "Arial", "微软雅黑"; 
				line-height: 25px;
				}
		    div{
				padding: 5px; text-align: center;
				}
		    div span{display: block;}
		    </style>
	</head>
	<body>
		<p>选择你喜欢的书:
			<input type="radio" name="book" onclick="book()">我和狗狗一起活下来
			<input type="radio" name="book" onclick="book()">灰霾来了怎么办
		</p>
		<div></div>
		<script type="text/javascript">
			function img(){
				window.alert("灰霾来了怎么办");
			}
			function book(){
				var divdoc = document.getElementsByTagName("div")[0];
				var booksdoc = document.getElementsByName("book");
				if(booksdoc[0].checked){
					//document.createElement("img"):在当前文档中创建一个"img"标签					
					var imagedoc = document.createElement("img");	//等价于<img />
					//以下三行都使用setAttribute()来给变量imagedoc添加属性并给添加的属性赋值
					imagedoc.setAttribute("src","WebProect/dog.jpg");  //等价于<img src = "images/dog.jpg" />
					imagedoc.setAttribute("alt","我和狗狗一起活下来");//等价于<img src = "images/dog.jpg" alt="我和狗狗一起活下来" />
					imagedoc.setAttribute("onclick","copyNode()");
					//使用appendChild()在divdoc节点中追加一个子元素imagedoc
					divdoc.appendChild(imagedoc);
				}else if(booksdoc[1].checked){
					var imagedoc = document.createElement("img");	//<img />					
					imagedoc.setAttribute("src","WebProect (2)/mai.jpg");	
					imagedoc.setAttribute("alt","灰霾来了怎么办");
					imagedoc.setAttribute("onclick","img()");
					divdoc.appendChild(imagedoc);																			
				}
			}
			function copyNode(){
				//选中div并赋值给divdoc
				var divdoc = document.getElementsByTagName("div")[0];
				//选中divdoc中的最后一个节点并赋值该节点
				var clonedoc= divdoc.lastChild.cloneNode(false);
				//将clonedoc添加到divdoc中
				divdoc.appendChild(clonedoc);
			}
		</script>
	</body>
</html>
 删除替换节点 

 演示案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
		    *{padding: 0; margin: 0; font-size: 12px;}
		    ul,li{list-style: none;}
		    li{float: left; text-align: center; width: 140px;}
		</style>
	</head>
	<body>
		<ul>
		    <li>
		        <img src="WebProect/f01.jpg" id="first">
		        <p><input type="button" value="删除我吧" onclick="del()"></p>
		    </li>
		    <li>
		        <img src="WebProect/f02.jpg" id="second">
		        <p><input type="button" value="换换我吧" onclick="rep()"></p>
		    </li>
		</ul>
		<script type="text/javascript">
			function del(){
				var delNode = document.getElementById("first");
                //删除一个节点需要通过该节点的父节点删除该节点
				//delNode.parentNode:代表返回delNode的父节点
				//delNode.parentNode.removeChild(delNode):代表delNode的父节点删除子节点delNode
				delNode.parentNode.removeChild(delNode);
			}
			function rep(){
				var oldNode=document.getElementById("second");
				var newNode = document.createElement("img");
		        newNode.setAttribute("src","WebProect/f03.jpg");
				oldNode.parentNode.replaceChild(newNode,oldNode);
			}			
		</script>	
	</body>
</html>

五.节点操作样式

JavaScript中的节点操作样式可以用于改变HTML元素的外观和布局。通过修改节点的样式属性,可以改变元素的大小、颜色、字体以及位置等

 

 style属性 

演示案例

当鼠标移动到“我的购物车”后显示购物车内容,鼠标离开后购物车内容消失

​
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>我的购物车</title>
    <style type="text/css">
		*{margin: 0;padding: 0; font-family: "Arial", "微软雅黑"; font-size: 12px; line-height: 25px;}
		ul,li{list-style: none;}
		#shopping{margin: 20px auto 0 auto; width: 320px;}
		#cart{
		    background: #f9f9f9 url("../images/cart.png") 20px 6px no-repeat;
		    border: solid 1px #dcdcdc;float: right;width: 100px;height: 28px;
		    padding-left: 45px;line-height: 28px;position: relative;cursor: pointer;}
		#cart span{
		    position: absolute;color: #fff;background: #dc1742;display: block;
		    width: 15px;height: 15px;border-radius: 50%;top:-5px;
		    right: 20px;font-size: 8px; line-height: 15px;text-align: center;
			}
			//使用display: none使div边框隐藏
		#cartList{width: 310px; float: right; border: solid 1px #dcdcdc; display: none;}
		#cartList h2{border-bottom: 1px dashed #cccccc; font-size: 14px; padding-left: 10px;}
		#cartList li{float: left;}
		#cartList li:nth-of-type(1){width: 65px; text-align: center;}
		#cartList li:nth-of-type(2){width: 155px;}
		#cartList li:nth-of-type(3){text-align: center; width: 85px;}
		#cartList .footer{clear: both; height: 35px; line-height: 35px; background: #f5f5f5; padding:0  5px;}
		#cartList .footer span{padding: 0 12px;}
		#cartList .footer span:nth-of-type(2){
			color: #fff;background: #dc1742;display: block;
			height: 25px;border-radius: 6px; float: right;text-align: center;font-weight: bold;margin-top: 5px;
		}
	</style>
</head>
<body>
<section id="shopping">
	 <!--onmouseover="over()":鼠标移动到对象后调用over()-->
	<!--onmouseout="out()":鼠标离开对象后调用out()函数-->
    <div id="cart" onmouseover="over()" onmouseout="out()">我的购物车<span>1</span></div>
    <div id="cartList">
        <h2>最新加入的商品</h2>
        <ul>
            <li><img src="images/makeup.jpg"></li>
            <li>倩碧经典三部曲套装(液体皂200ml+明肌2号水200ml+润肤乳125ml)</li>
            <li>¥558.00×1<br/>删除</li>
        </ul>
        <div class="footer">共1件商品<span>共计¥558.00</span> <span>去购物车</span></div>
    </div>
</section>
<script type="text/javascript">
	function over(){
		 document.getElementById("cart").style.backgroundColor = "#ffffff";
		 //使用zIndex提高层级优先显示
		 document.getElementById("cart").style.zIndex = "100";
		 //style.borderBottom = "none":删除下边框
		 document.getElementById("cart").style.borderBottom = "none";
		 document.getElementById("cartList").style.display="block";
		 document.getElementById("cartList").style.position="relative";
		 document.getElementById("cartList").style.top="-1px";
	}
	//将out函数中执行的代码反向操作即可完成鼠标离开后div边框收回的操作
	function out(){
		//还原背景颜色
		document.getElementById("cart").style.backgroundColor = "#f9f9f9";
		//还原下边框
		document.getElementById("cart").style.borderBottom="solid 1px #dcdcdc";
		//使出现的div边框消失
		document.getElementById("cartList").style.display="none";
	}
</script>
</body>
</html>

​

 

class-name属性

上述购物车案例也可通过下述class-name属性实现

class-name属性的本质是直接调用CSS中的样式。

<script type="text/javascript">
	function over(){
		//className = "cartOver":等价于直接调用CSS中class="cartOver"的所有样式
		document.getElementById("cart").className = "cartOver";     
		document.getElementById("cartList").className = "cartListOver";
	}
	function out(){
		document.getElementById("cart").className = "cartOut";
		document.getElementById("cartList").className = "cartListOut";
	}
</script>

  六.获取元素位置

总结

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

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

相关文章

【论文精读】 | 基于图表示的视频抑郁症识别的两阶段时间建模框架

文章目录 0、Description1、Introduction2、Related work2.1 Relationship between depression and facial behaviours2.2 Video-based automatic depression analysis2.3 Facial graph representation 3、The proposed two-stage approach3.1 Short-term depressive behaviour…

18746 逆序数

这个问题可以使用归并排序的思想来解决。在归并排序的过程中&#xff0c;我们可以统计逆序数的数量。当我们合并两个已经排序的数组时&#xff0c;如果左边的数组中的元素&#xfffd;&#xfffd;于右边的数组中的元素&#xff0c;那么就存在逆序&#xff0c;逆序数的数量就是…

力扣SQL50 按分类统计薪水 条件统计

Problem: 1907. 按分类统计薪水 文章目录 思路Code 思路 &#x1f468;‍&#x1f3eb; 参考题解 Code SELECT Low Salary AS category,SUM(CASE WHEN income < 20000 THEN 1 ELSE 0 END) AS accounts_count FROM AccountsUNION SELECT Average Salary category,SUM(C…

DBus快速入门

DBus快速入门 参考链接&#xff1a; 中文博客&#xff1a; https://www.e-learn.cn/topic/1808992 https://blog.csdn.net/u011942101/article/details/123383195 https://blog.csdn.net/weixin_44498318/article/details/115803936 https://www.e-learn.cn/topic/1808992 htt…

Vue3 Pinia的创建与使用代替Vuex 全局数据共享 同步异步

介绍 提供跨组件和页面的共享状态能力&#xff0c;作为Vuex的替代品&#xff0c;专为Vue3设计的状态管理库。 Vuex&#xff1a;在Vuex中&#xff0c;更改状态必须通过Mutation或Action完成&#xff0c;手动触发更新。Pinia&#xff1a;Pinia的状态是响应式的&#xff0c;当状…

JAVA中的异常:异常的分类+异常的处理

文章目录 1. 异常的分类1.1 Error1.2 Exception1.2.1 运行时异常1.2.2 非运行时异常 2.异常的处理2.1 try catch用法2.2 throws和throw的区别 1. 异常的分类 Throwable类&#xff08;表示可抛&#xff09;是所有异常和错误的超类&#xff0c;两个直接子类为Error和Exception分…

C++11新特性——智能指针——参考bibi《 原子之音》的视频以及ChatGpt

智能指针 一、内存泄露1.1 内存泄露常见原因1.2 如何避免内存泄露 二、实例Demo2.1 文件结构2.2 Dog.h2.3 Dog.cpp2.3 mian.cpp 三、独占式智能指针:unique _ptr3.1 创建方式3.1.1 ⭐从原始(裸)指针转换&#xff1a;3.1.2 ⭐⭐使用 new 关键字直接创建&#xff1a;3.1.3 ⭐⭐⭐…

敏感信息泄露wp

1.右键查看网页源代码 2.前台JS绕过&#xff0c;ctrlU绕过JS查看源码 3.开发者工具&#xff0c;网络&#xff0c;查看协议 4.后台地址在robots,拼接目录/robots.txt 5.用dirsearch扫描&#xff0c;看到index.phps,phps中有源码&#xff0c;拼接目录&#xff0c;下载index.phps …

【Go - context 速览,场景与用法】

作用 context字面意思上下文&#xff0c;用于关联管理上下文&#xff0c;具体有如下几个作用 取消信号传递&#xff1a;可以用来传递取消信号&#xff0c;让一个正在执行的函数知道它应该提前终止。超时控制&#xff1a;可以设定一个超时时间&#xff0c;自动取消超过执行时间…

Oat++ 后端实现跨域

这里记录在官方的例子中&#xff0c;加入跨域。Oat Example-CRUD 在官方的例子中&#xff0c;加入跨域。 Oat Example-CRUD 修改AppComponent.hpp文件中的代码&#xff0c;如下&#xff1a; #include "AppComponent.hpp"#include "controller/UserController…

8、从0搭建企业门户网站——网站部署

目录 正文 1、域名解析 2、云服务器端口授权 3、Mysql数据库初始化 4、上传网站软件包 5、Tomcat配置 6、运行Tomcat 7、停止Tomcat 8、部署后发现验证码无法使用 完毕! 正文 当云服务器租用、域名购买和软件开发都完成后,我们就可以开始网站部署上线,ICP备案会长…

表达式的转换

题目&#xff1a; 表达式的转换 - 洛谷 P1175 - Virtual Judge 思路&#xff1a; 这道题可以拆成两问&#xff1a; 第一问&#xff0c;将中缀表达式转成后缀表达式放入一个数组 第二问&#xff0c;将后缀表达式的数组计算&#xff0c;并输出过程 第一问思路&#xff1a; …

Python高维度大型气象矩阵存储策略分享

零、前情提要 最近需要分析全球范围多变量的数值预报数据&#xff0c;将grb格式的数据下载下来经过一通处理后需要将预处理数据先保存一遍&#xff0c;方便后续操作&#xff0c;处理完发现此时的数据维度很多&#xff0c;数据量巨大&#xff0c;使用不同的保存策略的解析难度和…

信息安全技术解析

在信息爆炸的今天&#xff0c;信息技术安全已成为社会发展的重要基石。随着网络攻击的日益复杂和隐蔽&#xff0c;保障数据安全、提升防御能力成为信息技术安全领域的核心任务。本文将从加密解密技术、安全行为分析技术和网络安全态势感知技术三个方面进行深入探讨&#xff0c;…

C++笔试强训9

文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 函数形参是个int类型的引用&#xff0c;传参的时候直接传一个int类型的变量就行 故选A 1.malloc/calloc/realloc—>free 2. new / delete 3. new[] / delete[] 一定要匹配起来使用&#xff0c;否则…

猫头虎分享:Numpy知识点一文带你详细学习np.random.randn()

&#x1f42f; 猫头虎分享&#xff1a;Numpy知识点一文带你详细学习np.random.randn() 摘要 Numpy 是数据科学和机器学习领域中不可或缺的工具。在本篇文章中&#xff0c;我们将深入探讨 np.random.randn()&#xff0c;一个用于生成标准正态分布的强大函数。通过详细的代码示…

ADS 使用教程(二十九)Understanding Bounding Area Layer for FEM

上一篇&#xff1a;ADS 使用教程&#xff08;二十八&#xff09;Working with FEM Mesh & Field Data in ADS 这一节&#xff0c;我们来一起了解一下有限元法&#xff08;FEM&#xff09;中的边界区域层&#xff08;Bounding Area Layer&#xff09;&#xff0c;这是定义仿…

python项目实例和源码权限管理系统

✌网站介绍&#xff1a;✌10年项目辅导经验、专注于计算机技术领域学生项目实战辅导。 ✌服务范围&#xff1a;Java(SpringBoo/SSM)、Python、PHP、Nodejs、爬虫、数据可视化、小程序、安卓app、大数据等设计与开发。 ✌服务内容&#xff1a;免费功能设计、免费提供开题答辩P…

浅谈HOST,DNS与CDN

首先这个是网络安全的基础&#xff0c;需得牢牢掌握。 1.什么是HOST HOSTS文件&#xff1a; 定义&#xff1a; HOSTS文件是一个操作系统级别的文本文件&#xff0c;通常位于操作系统的系统目录中&#xff08;如Windows系统下的C:\Windows\System32\drivers\etc\hosts&#xf…

黑马头条vue2.0项目实战(二)——登录注册功能的实现

1. 布局结构 目标 能实现登录页面的布局 能实现基本登录功能 能掌握 Vant 中 Toast 提示组件的使用 能理解 API 请求模块的封装 能理解发送验证码的实现思路 能理解 Vant Form 实现表单验证的使用 这里主要使用到三个 Vant 组件&#xff1a; NavBar 导航栏 Form 表单 F…