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

news2024/11/29 10:58:15

项目代码

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. 得到所有的img
            var imgs = document.getElementsByTagName("img");
            //老师说 imgs 是 HTMLCollections
            alert("猫猫的数量是=" + 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 -> vue
            var img = document.createElement("img");
            //alert(img);//?
            img.src = "./img/1.png";
            img.width = "100";
            //2. 展示, 添加到 doucment.body
            document.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, 可以修改value
            var but1 = document.getElementById("but1");
            //1. 得到所有的img
            var 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
            // 类型转换是靠api
            wugui_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, 说明一定发生碰撞

            //得到乌龟和公鸡左上角的距离, 纵向距离y
            var y = Math.abs(wugui_top - cock_top);
            // 得到乌龟和公鸡左上角的距离, 横向距离x
            var 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>
<!--把乌龟放在一个div
    1. 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.coloradmin.cn/o/1286229.html

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

相关文章

Java集合常见问题

目录 Java集合 1.前言2.集合3.Collection接口类3.1 List接口3.1.1 ArrayList&#xff08;常用&#xff09;3.1.2 LinkedList&#xff08;常用&#xff09;3.1.3 Vector&#xff08;不常用&#xff09; 3.2 Set接口3.2.1 HashSet&#xff08;常用&#xff09;3.2.2 LinkedHash…

最高性能、最低错误率!一年沉寂,IBM王者归来

周一&#xff0c;国际商业机器公司&#xff08;IBM&#xff09;发布了首台量子计算机&#xff0c;它拥有1000多个量子比特&#xff08;相当于普通计算机中的数字比特&#xff09;。但该公司表示&#xff0c;现在它将转变思路&#xff0c;专注于提高机器的抗错能力&#xff0c;而…

Ruff智能物联网网关助力工厂数智化运营,实现产量提升5%

数字化转型是大势所趋&#xff0c;以工业互联网为代表的数实融合是发展数字经济的重要引擎&#xff0c;也是新质生产力的一大助力。工业互联网是新工业革命的重要基石&#xff0c;加快工业互联网规模化应用&#xff0c;是数字技术和实体经济深度融合的关键支撑&#xff0c;是新…

【面试HOT200】二叉树的构建二叉搜索树篇

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于【CodeTopHot200】进行的&#xff0c;每个知识点的修正和深入主要参…

免费SSL证书靠谱吗?

首先&#xff0c;我们需要明确一点&#xff0c;那就是免费SSL证书并非完全没有价值。它们同样能够提供基本的数据加密功能&#xff0c;确保用户的信息在传输过程中不会被第三方截获。因此&#xff0c;如果你的网站不需要处理敏感信息&#xff0c;例如个人身份信息、银行卡号等&…

地方招商策略:招商招哪些,如何选择理想的企业?

招商引资是推动地方经济发展的不二选择&#xff0c;通过吸引优质企业入驻&#xff0c;不仅可以带来直接的投资和税收&#xff0c;还可以为地方创造更多的就业机会&#xff0c;引入高端人才、先进的技术及管理经验&#xff0c;同时&#xff0c;招商引资还能够促进地方的产业升级…

深度优先搜索(DFS)LeetCode 2477. 到达首都的最少油耗

2477. 到达首都的最少油耗 给你一棵 n 个节点的树&#xff08;一个无向、连通、无环图&#xff09;&#xff0c;每个节点表示一个城市&#xff0c;编号从 0 到 n - 1 &#xff0c;且恰好有 n - 1 条路。0 是首都。给你一个二维整数数组 roads &#xff0c;其中 roads[i] [ai,…

回溯总结(一)基础概念及模板

1.回溯是什么&#xff1f; 回溯&#xff0c;也叫回溯搜索法&#xff0c;搜索的一种方式。回溯搜索实际上也是一种暴力搜索&#xff08;本质是穷举&#xff09;&#xff08;对于有些问题是唯一可以解决的办法了&#xff0c;for循环是不适用的&#xff09;和别的搜索不同之处在于…

基于混沌算法的图像加密解密系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义&#xff1a; 随着信息技术的迅猛发展&#xff0c;图像的传输和存储已经成为现代社会中不可或缺的一部分。然而&#xff0c;随着互联网的普及和信息的快速传播&am…

Node-red的节点离线安装

Node-red节点离线安装 前言 目前越来越高的数据安全的要求&#xff0c;因此我们很多的生产类服务器是无法进行在线化部署的&#xff0c;为了解决这一问题&#xff0c;我们需要在无法连接外部网络环境的情况下&#xff0c;实现Node-red的节点的安装&#xff0c;以满足项目的需…

el-dialog 垂直居中

写文章总是在想引言&#xff0c;怎么开头才会显的更加优雅&#xff0c;更加让读者朋友给我点赞。看到有人点赞&#xff0c;我就觉的进行技术经验分享是一件非常愉快的事情&#xff0c;可是打小作文写的不好不会组织语句&#xff0c;就喜欢直来直去。老师说让写春天的作文&#…

vue2 element-ui select下拉框 选择传递多个参数

<el-select v-model"select" slot"prepend" placeholder"请选择" change"searchPostFn($event,123)"> <el-option :label"item.ziDianShuJu" :value"{value:item.id, label:item.ziDianShuJu}" v-for&qu…

文件夹批量改名:轻松管理文件夹,随机重命名不求人

在日常生活和工作中&#xff0c;文件夹批量改名是一个常见的需求。当有大量的文件夹时&#xff0c;它们可能会变得混乱和难以管理。有时候要对大量的文件夹进行重命名&#xff0c;以便更好地组织和管理这些文件。手动重命名每个文件夹可能会非常耗时且容易出错。现在可以来看下…

印度股市荣登全球第四,释放了什么讯号?

KlipC报道&#xff1a;随着散户迅速增加&#xff0c;外国资金重新流入&#xff0c;自2020年3月大流行低点以来&#xff0c;截至当地时间12月4日&#xff0c;其印度股市总市值已经上涨到3.93万亿美元&#xff0c;仅次于美国、中国和日本。 值得一提的是&#xff0c;Sensex指数飙…

java springboot简单了解数据源实现 与 springboot内置数据源

之前 我们讲到的项目 数据库管理 用了三种技术 数据源管理方式 我们选择了: DruidDataSource 持久化技术: MyBatis-Plus / MyBatis 数据库: MySql 那么 我们在刚接触数据库连接时 是没用配置Druid的 那它有没有用数据源呢&#xff1f; 我们接触过的配置Druid的方式有两种 用…

CSS特效026:扇骨打开关闭的动画

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS…

xcode ——Instrumets(网络连接调试)使用

环境&#xff1a; instruments 使用只能在真机调试时使用&#xff0c;且真机系统必须ios15 点击debug 按钮——Network——Profile in Instruments 然后就可以看到如下面板 展开运行的项目&#xff0c;点击session下的域名&#xff0c;下方回出现该域名下的网络请求。点击Deve…

持续集成交付CICD:Jenkins使用GitLab共享库实现前后端项目Sonarqube

目录 一、实验 1.Jenkins使用GitLab共享库实现后端项目Sonarqube 2.优化GitLab共享库 3.Jenkins使用GitLab共享库实现前端项目Sonarqube 二、问题 1.sonar-scanner 未找到命令 2.npm 未找到命令 一、实验 1.Jenkins使用GitLab共享库实现后端项目Sonarqube &#xff08…

现代版“田忌赛马”:IPMT如何实现资源利用最大化

摘要&#xff1a;在流程调整和产品重整过程中&#xff0c;IPMT发挥了至关重要的作用。IPMT是什么&#xff1f;它的职责到底是什么&#xff1f;每个公司必须要有IPMT吗&#xff1f; 1992年&#xff0c;IBM在激烈的市场竞争下&#xff0c;遭遇到了严重的财政困难&#xff0c;利润…

用js自定义一个(v-model)vModel双向绑定函数

vue中的v-model是双向绑定的, 我们自己用JavaScript实现一个双向绑定vModel函数。 // element 元素或者#id,.class,div 得是input标签 // data 对象 // 将要绑定property 对象中的key<input class"vmodel"/>function vModel(element, data, property) {if (…