【Java Web学习笔记】4 - DOM文档对象模型

项目代码

https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/javascript

零、在线文档

JavaScript HTML DOM

一、HTML DOM基本介绍

1. DOM全称是Document Object Model文档对象模型 文档<---映射--->对象

2.就是把文档中的标签,属性,文本,转换成为对象来管理

二、doucment对象

1.doucment说明

1. document它管理了所有的HTML文档内容

2. document它是一种树结构的文档。

3.有层级关系在dom中把所有的标签都对象化

4.通过document可以访问所有的标签对象

案例1

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>getElementById的使用</title><!--1. 先得到 h1 的 dom对象, 通过 id 获取2. 对h1对应的dom对象操作即可--><script type="text/javascript">// function getValue() {//定义函数//myHeader 就是dom对象// var myHeader = document.getElementById("myHeader");//alert(myHeader);//HTMLHeadingElement// myHeader.innerText 获取到 myHeader的包含的文本//看看 innerText , innerHTML// alert(myHeader.innerText);//文本 韩顺平教育// alert(myHeader.innerHTML);//html <div>韩顺平教育</div>// }//动态绑定,讲过老师,前面老师讲的 js事件章节//为了让小伙伴,听得明白一点,快速演示->回去看js事件window.onload = function () {//1. 获取 myHeader的dom对象var myHeader = document.getElementById("myHeader");//2. 给myHeader绑定 onclick的事件myHeader.onclick = function () {alert("动态绑定 内容是= " + myHeader.innerText);}}//理解了基本原理,其它的问题就是API层级</script>
</head>
<body>
<!-- 静态绑定一个点击事件 -->
<h1 id="myHeader"><div>韩顺平教育</div></h1>
<p>Click on the header to alert its value</p>
</body>
</html>

案例2

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>getElementsByTagName</title><script type="text/javascript">function changeImgs() {//1. 得到所有的imgvar imgs = document.getElementsByTagName("img");//老师说 imgs 是 HTMLCollectionsalert("猫猫的数量是=" + imgs.length);//2. 修改src,遍历修改for (var i = 0; i < imgs.length; i++) {imgs[i].src = "./img/" + (i+4) +".png";}//3课后作业->再评讲//思路//(1) input 增加id, 可以修改value//(2) 根据input 的 value值来决定是切换猫还是狗 if -- else if ---//(3) 其它自己先思考}</script>
</head>
<body>
<img src="./img/1.png" height="100">
<img src="./img/2.png" height="100">
<img src="./img/3.png" height="100">
<br/>
<input type="button" onclick="changeImgs()"value="查看多少小猫,并切换成小狗"/>
</body>
</html>

案例3

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>createElement</title><script type="text/javascript">function addImg() {//创建一只小猫 图片,展示在页面//1. 创建一只小猫 图片 img,拿到对象好办->ssm -> springboot -> vuevar img = document.createElement("img");//alert(img);//?img.src = "./img/1.png";img.width = "100";//2. 展示, 添加到 doucment.bodydocument.body.appendChild(img);}</script>
</head>
<body>
<input type="button" onclick="addImg()"value="点击创建一只小猫~"/>
</body>
</html>

案例作业

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>课后作业猫狗切换</title><script type="text/javascript">function changeImgs() {//对程序的结构进行一个调整//(1) input 增加id, 可以修改valuevar but1 = document.getElementById("but1");//1. 得到所有的imgvar imgs = document.getElementsByTagName("img");//老师说 imgs 是 HTMLCollections//alert("动物数量是= " + imgs.length);if(but1.value == "查看多少小猫,并切换成小狗") { //猫->狗//2. 修改src,遍历修改for (var i = 0; i < imgs.length; i++) {imgs[i].src = "./img/" + (i + 4) + ".png";}but1.value = "查看多少小狗,并切换成小猫";} else if(but1.value == "查看多少小狗,并切换成小猫") {//狗->猫//2. 修改src,遍历修改for (var i = 0; i < imgs.length; i++) {imgs[i].src = "./img/" + (i + 1) + ".png";}but1.value = "查看多少小猫,并切换成小狗";}//(2) 根据input 的 value值来决定是切换猫还是狗 if -- else if ---//(3) 其它自己先思考}</script>
</head>
<body>
<img src="./img/1.png" height="100">
<img src="./img/2.png" height="100">
<img src="./img/3.png" height="100">
<br/>
<input type="button" id="but1" onclick="changeImgs()"value="查看多少小猫,并切换成小狗"/>
</body>
</html>


三、HTML DOM节点

1.节点属性

在HTML DOM (文档对象模型) 中,每个部分都是节点:

        1)文档本身是文档节点

        2)所有HTML元素是元素节点

        3)所有HTML属性是属性节点

        4) HTML元素内的文本是文本节点

        5)注释是注释节点

2.节点常用方法

        1.通过具体的元素节点调用getElementsByTagName()方法,获取当前节点的指定标签名孩子节点

        2. appendChild( oChildNode )方法,可以添加一 一个子节点,oChildNode是要添加的孩子节点

3.节点常用属性

1). childNodes属性,获取当前节点的所有子节点,

2). firstChild属性,获取当前节点的第-一个子节点

3). lastChild属性,获取当前节点的最后一一个子节点

4). parentNode属性,获取当前节点的父节点

5). nextSibling属性]获取当前节点的下一一个节点

6). previousSibling属性,获取当前节点的上一一个节点

7). className用于获取或设置标签的class属性值

8). innerHTML属性,表示获取/设置起始标签和结束标签中的内容

9). innerText属性,表示获取/设置起始标签和结束标签中的文本

4.实例

乌龟吃鸡游戏

一定要知道这个坐标体系的基本规则

1.先把乌龟和公鸡和控制的表格,显示在网页->直接给

2.分析如何让乌龟动起来

        2.1拿到wugui.dom对象

        2.2获取wugui.style.left和wugui.style.top的值, 通过修改就可以让乌龟动起来

        2.3给我们的四个按钮,绑定onclick事件(静态绑定)

3.代码实现让乌龟动起来

        3.1向上wugui.style.top减小向下wugui.style.top变动向左wugui.style.left变得向右wugui.style.left减小

4.分析如何判断乌龟和公鸡碰撞

        4.1得到乌龟和公鸡左上角的距离,纵向距离y

        (1)如果乌龟在上面,当y <乌龟图片的高度时,说明他们可能在纵向发生重叠,使用yy 记录

        (2)如果乌龟在下面,当y <公鸡图片的高度时,说明他们可能在纵向发生重叠,使用yy 记录

        4.2得到乌龟和公鸡左上角的距离,横向距离x

        (1)如果乌龟在左面,当x <乌龟图片的宽度时,说明他们可能在横向发生重叠,使用xx 记录

        (2)如果乌龟在右面,当x <公鸡图片的宽度时,说明他们可能在横向发生重叠,使用xx 记录

        4.3如果xx和yy同时为true,说明一-定发生碰撞

5.代码实现判断乌龟和公鸡碰撞,并给出提示

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>乌龟游戏</title><script type="text/javascript">//定义公鸡的坐标var cock_top = 200;var cock_left = 200;//定义乌龟的高度和宽度var wugui_height = 67;var wugui_width = 94;//定义公鸡的高度和宽度var cock_height = 73;var cock_width = 76;//编程思想, 技巧--> 不知道是什么就输出,或者日志,或者debug//编程小技巧: 在不确定情况下,可以输出看看function move(obj) {//alert("val= " + obj.value);// 2.1 拿到wugui dom 对象var wugui = document.getElementById("wugui");// 2.2 获取wugui.style.left 和 wugui.style.top 的值, 通过修改就可以让乌龟动起来var wugui_left = wugui.style.left;var wugui_top = wugui.style.top;// alert(wugui_left);// alert(wugui_top);// 分析: wugui_left 和 wugui_top 是 string '100px' -> nubmer 100// 类型转换是靠apiwugui_left = parseInt(wugui_left.substring(0, wugui_left.indexOf("p")));wugui_top = parseInt(wugui_top.substring(0, wugui_top.indexOf("p")));//alert("wugui_left= " + wugui_left + typeof wugui_left);//根据obj.value 来进行上下左右的处理if ("向上走" == obj.value) {wugui_top -= 10;wugui.style.top = wugui_top + "px";} else if ("向下走" == obj.value) {wugui_top += 10;wugui.style.top = wugui_top + "px";} else if ("向左走" == obj.value) {wugui_left -= 10;wugui.style.left = wugui_left + "px";} else if ("向右走" == obj.value) {wugui_left += 10;wugui.style.left = wugui_left + "px";}//玩一把,完成碰撞功能// 4. 分析如何判断乌龟和公鸡碰撞// 4.1 得到乌龟和公鸡左上角的距离, 纵向距离y// (1) 如果乌龟在上面, 当y < 乌龟图片的高度 时,说明 他们可能在纵向发生重叠, 使用yy 记录// (2) 如果乌龟在下面, 当y < 公鸡图片的高度 时,说明 他们可能在纵向发生重叠, 使用yy 记录//// 4.2 得到乌龟和公鸡左上角的距离, 横向距离x// (1) 如果乌龟在左面, 当x < 乌龟图片的宽度 时,说明 他们可能在横向发生重叠, 使用xx 记录// (2) 如果乌龟在右面, 当x < 公鸡图片的宽度 时,说明 他们可能在横向发生重叠, 使用xx 记录//// 4.3 如果 xx 和 yy 同时为true, 说明一定发生碰撞//得到乌龟和公鸡左上角的距离, 纵向距离yvar y = Math.abs(wugui_top - cock_top);// 得到乌龟和公鸡左上角的距离, 横向距离xvar x = Math.abs(wugui_left - cock_left);var yy = 0;//默认纵向没有重叠var xx = 0;//默认横向没有重叠//如果乌龟在上面, 当y < 乌龟图片的高度 时,说明 他们可能在纵向发生重叠, 使用yy 记录//如果乌龟在下面, 当y < 公鸡图片的高度 时,说明 他们可能在纵向发生重叠, 使用yy 记录if (wugui_top < cock_top) {//乌龟在上if (y < wugui_height) {yy = 1;}} else {//乌龟在下if (y < cock_height) {yy = 1;}}//如果乌龟在左面, 当x < 乌龟图片的宽度 时,说明 他们可能在横向发生重叠, 使用xx 记录//如果乌龟在右面, 当x < 公鸡图片的宽度 时,说明 他们可能在横向发生重叠, 使用xx 记录if (wugui_left < cock_left) {//乌龟在左面if (x < wugui_width) {xx = 1;}} else {//乌龟在右面if (x < cock_width) {xx = 1;}}//如果 xx 和 yy 同时为true, 说明一定发生碰撞if (xx && yy) {alert("乌龟很厉害!");//乌龟放到原来的位置wugui.style.left = "100px";wugui.style.top = "120px";}}</script>
</head>
<body>
<table border="1"><tr><td></td><!--1. this表示的是你点击的这个button,而且已经是一个dom对象2. 可以使用属性和方法--><td><input type="button" value="向上走" onclick="move(this)"/></td><td></td></tr><tr><td><input type="button" value="向左走" onclick="move(this)"/></td><td></td><td><input type="button" value="向右走" onclick="move(this)"/></td></tr><tr><td></td><td><input type="button" value="向下走" onclick="move(this)"/></td><td></td></tr>
</table>
<!--把乌龟放在一个div1. style 的 position: absolute 表示绝对定位2. left:100px 表示图片距离窗口的原点的横坐标3. top:120px; 表示图片距离窗口的原点的纵坐标4. 针对图片而言,定位的点,是图片的左上角
-->
<div id="wugui" style="position: absolute ;left:100px;top:120px;"><img src="1.bmp" border="1" alt=""/>
</div>
<!--公鸡图片div-->
<div id="cock" style="left:200px;position:absolute;top:200px;"><img src="2.bmp" border="1" alt=""/>
</div>
</body>
</html>


 

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

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

相关文章

WebSocket入门介绍及编程实战

HTTP的限制 全双工和半双工&#xff1a; 全双工&#xff1a;全双工&#xff08;Full Duplex&#xff09;是允许数据在两个方向上同时传输。 半双工&#xff1a;半双工&#xff08;Half Duplex&#xff09;是允许数据在两个方向上传输&#xff0c;但是同一个时间段内只允许一个…

解决 引element-plus依赖时的core-js报错

参考资料&#xff1a; https://blog.csdn.net/weixin_42164539/article/details/123388542 本人正在重构两年前搭建到一半的博客网站&#xff0c;相关依赖都很陈旧&#xff0c;用到了 npm-check-updates 检测项目可升级依赖&#xff1a; 补依赖过程始中报错 解决方案&#xf…

linux 内核同步互斥技术之信号量

信号量 信号量允许多个进程同时进入临界区&#xff0c;大多数情况下只允许一个进程进入临界区&#xff0c;把信号量的计数值设置为 1&#xff0c;即二值信号量&#xff0c;这种信号量称为互斥信号量。可允许多个锁持有者。 和自旋锁相比&#xff0c;信号量适合保护比较长的临界…

Java-宋红康-(P133-P134)-多线程创建方式(Thread and Runnable)

b站视频 133-多线程-线程创建方式1&#xff1a;继承Thread类_哔哩哔哩_bilibili 目录 3.1 继承Thread 3.1.1 继承Thread类方式 3.1.2 线程的执行流程 3.1.3 线程内存图 3.1.4 run()方法和start()方法 3.1.5 线程名字的设置和获取 3.1.6 获取运行main方法线程的名字 3.…

Linux进程间通信之共享内存

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容讲解共享内存原理和相关接口的介绍&#xff0c;以及一个…

更换cmd下默认选择Python解释器

问题 我的电脑里有多个Python解释器&#xff0c;一个是自己下载的python37&#xff0c;版本是3.7.0&#xff0c;一个是anaconda的base环境&#xff0c;版本是3.7.4&#xff0c;还有虚拟环境里的python解释器。 最近发现&#xff0c;在cmd下输入python&#xff0c;使用的是anac…

肺是人体的第一道防线,流感频发季节,最有效的养肺方法你得知道!

肺脏是人体的第一道防线&#xff0c;牵动着整个呼吸道的健康&#xff0c;一旦肺脏受损&#xff0c;易引发咳嗽、气喘甚至肺炎。在流感、呼吸道疾病高发的冬季&#xff0c;如何呵护肺脏&#xff0c;保持身体健康&#xff1f; 全民养肺&#xff0c;刻不容缓 养肺不仅仅是中老年朋…

深入浅出之中央空调体系架构及楼宇自控系统

一、关于建筑节能 1、建筑能耗 在中国&#xff0c;建筑能耗占社会总能耗45.5%。来源&#xff1a;《中国建筑能耗研究报告&#xff08;2022&#xff09;》 2、空调、采暖、照明占比最高 建筑节能是指在保证、提高建筑舒适性和生活质量的条件下&#xff0c;在建筑物使用的全过…

12.5 作业

1&#xff0c; 以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&#xff0c;动物园里有…

【Qt开发流程】之对象模型2:属性系统

描述 Qt提供了一个复杂的属性系统&#xff0c;类似于一些编译器供应商提供的属性系统。然而&#xff0c;作为一个独立于编译器和平台的库&#xff0c;Qt不依赖于非标准的编译器特性&#xff0c;如__property或[property]。 Qt解决方案适用于Qt支持的所有平台上的任何标准c编译…

力扣第374场周赛题解

这一场周赛的题目是比较难的一次&#xff0c;写了1个多小时就写了两个题目。 首先第一题&#xff1a; 纯水题&#xff0c;遍历然后进行一下判断就可以解决了。这边就不放代码了。 第二题&#xff1a; 这个题目&#xff0c;我觉得难度非常大&#xff0c;其实代码量也不大都是很…

IOday3作业

1> 使用文件IO完成对图像的读写操作 #include<myhead.h>int main(int argc, const char *argv[]) {//只读打开图片int fd-1;if((fd open("./R-C.bmp",O_RDWR))-1){perror("open");return -1;}//向后便宜两个字节找到大小的起始地址lseek(fd,2,S…

【数据结构】二叉树的实现

目录 1. 前言2. 二叉树的实现2.1 创建一棵树2.2 前序遍历2.2.1 分析2.2.2 代码实现2.2.3 递归展开图 2.3 中序遍历2.3.1 分析2.3.2 代码实现2.3.3 递归展开图 2.4 后序遍历2.4.1 分析2.4.2 代码实现2.4.3 递归展开图 2.5 求节点个数2.5.1 分析2.5.2 代码实现 2.6 求叶子节点个数…

Linux 调试器 --- g d b 使用

目录 一&#xff1a;gdb简介 二&#xff1a;示例代码 三&#xff1a;使用 1.启动gdb 2.各种指令 <1>: 查看源代码 <2>:设置断点 <3>:查看断点信息 <4>:删除断点 <5>: run <6>:逐过程调试 <7>:逐语句调试 <8>:查…

TrustZone​之在安全状态之间切换

如果处理器处于NS.EL1,而软件想要转移到S.EL1,应该如何实现呢? 要改变安全状态,无论是向上还是向下,执行都必须经过EL3,如下图所示: 前面的图表显示了在不同安全状态之间移动涉及的步骤的示例序列。逐步进行解释: 进入较高的异常级别需要一个异常。通常,此异常…

相关基础知识

本文引注&#xff1a; https://zhuanlan.zhihu.com/p/447221519 1.方差 2.自协方差矩阵 3.自相关矩阵 4.互协方差矩阵 5.互相关矩阵 6.相关系数 7.自相关函数、自协方差函数与功率谱密度 8.互相关函数、互协方差函数与互功率谱密度

时间选择器

<el-form-item label"时间范围"><!-- <el-date-picker size"small"v-model"createTime"type"daterange"range-separator"至"start-placeholder"请输入起始创建时间"end-placeholder"请输入终止创…

无线网优AP、SW发现控制器

目录 无线网优解决的问题 1、信号覆盖不足的原因 2、信道繁忙 3、非802.11干扰 4、协商速率低 5、漫游效果差 6、有线带宽阻塞 无线网优方法 交换机发现与激活 一&#xff0c;交换机发现控制器方式 1、二层广播 2、DHCP option43方式 3、DNS域名解析方式 4、trou…

基于springboot + vue大学生竞赛管理系统

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

【AIGC】AI作图最全提示词prompt集合(收藏级)

目录 一、正向和负向提示词 二、作图参数 你好&#xff0c;我是giszz. AI做图真是太爽了&#xff0c;解放生产力&#xff0c;发展生产力。 但是&#xff0c;你是不是也总疑惑&#xff0c;为什么别人的图&#xff0c;表现力那么丰富呢&#xff0c;而且指哪打哪&#xff0c;要…