HTML---JavaScript操作DOM对象

目录

文章目录

本章目标

一.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>

 点击“删除我”“换换我”后

五.节点操作样式 

 avaScript中的节点操作样式可以用于改变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>

 六.获取元素位置


总结

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[C#]winform使用纯opencvsharp部署yolox-onnx模型

【官方框架地址】 https://github.com/Megvii-BaseDetection/YOLOX 【算法介绍】 YOLOX是一个高性能的目标检测算法&#xff0c;它是基于YOLO&#xff08;You Only Look Once&#xff09;系列算法的Anchor Free版本。YOLOX由Megvii Technology的研究团队开发&#xff0c;并在…

打架识别摄像机

随着社会治安问题的增加&#xff0c;打架事件在公共场所频繁发生&#xff0c;给社会治安带来了一定程度的威胁。因此&#xff0c;为了提高公共场所的安全性&#xff0c;可以利用现代科技&#xff0c;如人工智能和摄像技术&#xff0c;开发一种打架识别摄像机。 这种摄像机可以通…

AIGC实战——改进循环神经网络

AIGC实战——改进循环神经网络 0. 前言1. 堆叠循环网络2. 门控制循环单元3. 双向单元相关链接 0. 前言 我们已经学习了如何训练长短期记忆网络 (Long Short-Term Memory Network, LSTM) 模型&#xff0c;以学习使用给定风格生成文本&#xff0c;接下来&#xff0c;我们将学习如…

软件测试|MySQL HAVING分组筛选详解

简介 在 MySQL 数据库中&#xff0c;HAVING 子句用于在使用 GROUP BY 子句对结果进行分组后&#xff0c;对分组后的数据进行筛选和过滤。它允许我们对分组后的结果应用聚合函数&#xff0c;并基于聚合函数的结果进行条件过滤&#xff0c;从而得到我们需要的最终结果集。本文将…

RISC-V Bytes: Caller and Callee Saved Registers

原文链接1&#xff1a;https://danielmangum.com/posts/risc-v-bytes-caller-callee-registers/ 原文链接2&#xff1a;https://zhuanlan.zhihu.com/p/77663680 //主要讲栈帧 原文链接3&#xff1a;https://www.jianshu.com/p/b666213cdd8a //主要讲栈帧 This is part of a new…

2024年中级工程师职称业绩报告该怎么写呢?

1、在写报告时一定要注意时间问题&#xff0c;需要与项目实际时间一致&#xff0c;要把自己的工作经历写清楚&#xff0c;在项目里主要负责什么内容&#xff0c;担任什么职务。 2、可以写发现了什么问题&#xff0c;并如何去解决的&#xff0c;或者因为你发现和创新给项目带来的…

Mermaid 教程

Mermaid 教程 Mermaid 介绍 Mermaid 是一个用于生成流程图、时序图、甘特图等图表的 JavaScript 库。它使用类似于 Markdown 的文本语法&#xff0c;使得创建图表变得简单直观。以下是一个简单的 Mermaid 教程&#xff0c;介绍如何使用 Mermaid 创建流程图、时序图和甘特图。…

docker启动mongo

用户名&#xff1a;root 密码&#xff1a;123456 version: 3.1 services:mongo:image: mongo:7container_name: mongorestart: alwaysports:- 27017:27017volumes:- /opt/data/mongo:/data/dbenvironment:TZ: Asia/ShanghaiMONGO_INITDB_ROOT_USERNAME: rootMONGO_INITDB_ROO…

数字孪生+可视化技术 构建智慧新能源汽车充电站监管平台

前言 充电基础设施为电动汽车提供充换电服务&#xff0c;是重要的交通能源融合类基础设施。近年来&#xff0c;随着新能源汽车产业快速发展&#xff0c;我国充电基础设施持续增长&#xff0c;已建成世界上数量最多、服务范围最广、品种类型最全的充电基础设施体系。着眼未来新…

《C++ Primer》第14章 重载运算与类型转换(二)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 14.8 函数调用运算符&#xff08;P506&#xff09; 如果类重载了函数调用运算符&#xff0c;则我们可以像使用函数一样使用该类的对象。这样的类同时也能存储状态&#xff0c;所以它们比普通函数更加灵活。…

Android可换行的RadioGroup

Android可换行的RadioGroup,有时候需要换行显示的单选列表&#xff0c;当然可以有多种实现方式&#xff0c;比如recycleview或者listview实现&#xff0c;本文采用的是RadioGrouprediobutton方式实现。 一、首先自定义view public class WrapRadioGroup extends RadioGroup {pr…

【XR806开发板试用】+ FreeRtos开发环境搭建

获取SDK SDK可以通过官网直接下载。 下载完成之后&#xff0c;通过gzip命令解压文件 gzip -d xr806_sdk.tar.gz 获取编译链工具 还是按照官网操作指南&#xff0c;下载 gcc-arm-none-eabi-8-2019-q3-update 下载之后进行解压&#xff0c;同理。 注意修改GCC路径&#xff0c…

三、C语言分支与循环知识点补充——随机数生成

本章分支结构的学习内容如下&#xff1a; 三、C语言中的分支与循环—if语句 (1) 三、C语言中的分支与循环—关系操作符 (2) 三、C语言中的分支与循环—条件操作符 与逻辑操作符(3) 三、C语言中的分支与循环—switch语句&#xff08;4&#xff09;分支结构 完 本章循环结构的…

直播预告丨看零售场,如何玩转 MaaS

今年&#xff0c;有一个被频繁提及的词是MaaS 这类工具正在帮助千行百业实现大模型落地产业 在零售场&#xff0c;特别是像京东这样拥有超高并发、超复杂协同的电商场内 也沉淀出了一套通用的AI基础设施——九数算法中台 从提升客户服务体验、平台效率出发&#xff0c;训练各…

AtCoder ABC194

这期比193稍微简单一点 C - Squared Error 手玩一下&#xff1a; N 3 N3 N3时 展开得 a 2 b 2 − 2 a b b 2 − c 2 − 2 b c a 2 c 2 − 2 a c a^2b^2-2abb^2-c^2-2bca^2c^2-2ac a2b2−2abb2−c2−2bca2c2−2ac 每个数平方项都要计算 n − 1 n-1 n−1次 减的那一份可…

MYSQL篇--事务机制高频面试题

事务 1 什么是数据库事务&#xff1f; 事务是一个不可分割的数据库操作序列&#xff0c;也是数据库并发控制的基本单位&#xff0c;其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作&#xff0c;要么都执行&#xff0c;要么都不执行。…

图纸版本管理混乱怎么办?彩虹PDM系统帮你搞定!

在现代制造业和工程领域&#xff0c;图纸版本管理的混乱常常是一个棘手的问题。不同版本的图纸可能导致严重的错误和生产问题&#xff0c;影响了产品质量和交付时间。然而&#xff0c;有一个强大的工具可以帮助企业解决这个问题&#xff0c;那就是PDM产品数据管理系统。彩虹PDM…

云流量回溯的工作原理及关键功能

云计算和网络技术的快速发展为企业提供了更灵活、高效的业务运营环境&#xff0c;同时也引发了一系列网络安全挑战。在这个背景下&#xff0c;云流量回溯成为网络安全领域的一个关键技术&#xff0c;为企业提供了对网络活动的深入洞察和实时响应的能力。 一、 云流量回溯的基本…

pkuseg按照用户自定义词典分词错误修正

import pkusegc pkuseg.pkuseg(user_dict"./data/dict.txt") sentence 数字传播实验班 print(c.cut(sentence))字典中包含“”数字传媒与人文学院"&#xff0c;添加自定义词典后&#xff0c;文本被错误分成““数字传 播 实验班” &#xff0c;debug发现solve…

OpenShift 4 - 在 OpenShift 上运行物体检测 AI 应用

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在 OpenShift 4.14 RHODS 2.5.0 的环境中验证 说明&#xff1a;请先根据《OpenShift 4 - 部署 OpenShift AI 环境&#xff0c;运行 AI/ML 应用&#xff08;视频&#xff09;》一文完成 OpenShift AI 环境…