JavaWeb JavaScript ⑧ DOM编程

news2024/9/22 19:21:49

在光芒万丈之前,我们都要欣然接受眼下的难堪和不易,接受一个人的孤独和无助,认真做好眼前的每一件事,你想要的都会有

                                                                                                                        —— 24.8.29

一、什么是DOM编程

简单来说:DOM(Document obiect Model)编程就是使用document对象的API完成对网页HTML文档进行动态修改,以实现网页数据和样式动态变化效果的编程

1.DOM编程如何使页面内容发生改变

利用.html文件生成document对象通过浏览器实时监测更新使页面内容发生改变

 2.document对象的逻辑结构

        树形结构的对象,DOM树

3.DOM树上的结点类型

node结点

        1.元素结点 element 标签

        2.属性结点 attribute 属性

        3.文本结点 text 双标签中间的文字

二、DOM编程API

1.获取页面元素的几种方式

① 在整个文档范围内查找元素结点

通过document对象元素id值获职元素        var els = document.getElementById("username")

根据元素的标签名获取多个同名元素    var els = document.getElementsByTagName("input")

根据元素的name属性值获得多个元素        var els = document.getElementsByName("aaa")

根据元素的class属性值获得多个元素        var els =document.getElementsByclassName("a")

② 在具体元素节点范围内查找子节点

通过父元素获取全部的子元素        var cs=parent.children;

通过父元素获取指定的子元素

        获取第一个子元素        console.log(parent.firstElementchild)

        获取最后一个子元素        console.log(parent.lastElementchild)

        获取第二个子元素        console.log(parent.children[11)

        获取第三个子元素        console.log(parent.children.item(2))

③ 查找指定子元素节点的父节点

根据子元素获取父元素        var child=document.getElementById( username);

根据当前元素获取兄弟元素        var pinput =document.getElementById("password")

获取前一个兄弟元素        console.log(pinput.previousElementsibling)

获取后一个兄弟元素        console.log(pinput.nextElementsibling)

2.操作元素属性值

① 属性操作

操作元素的属性      语法:元素.属性名 =“属性值”
操作元素的样式      语法:元素.style.样式名=“样式值”    原始样式名中的“-”符号转换为驼峰式

② 内部文本操作

只识别文本        语法:元素.innerHTML =“文本”
可以同时识别html代码        元素.innerText =“文本“

3.增删元素

① 对页面的元素进行增删操作

创建元素        var csli = document.createElement("li”);

在父元素中追加子元素        父元素.appendchild(子元素);
在指定元素前增加某个元素        cityul.insertBefore(csli,gzli);
在父元素中,用某个新元素替换原本的子元素        cityul.replacechild(新元素,旧元素)
删除当前元素         元素.remove();
清空元素        元素.innerHTML ="";

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<script>
            /*
            DOM编程API
            1.获得document对象——dom树
                window.document
            2.从document中获取要操作的元素
                ① 直接获取
                    通过document对象元素id值获取元素    var el1 = document.getElementById("username")
                    根据元素的标签名获取多个同名元素    var els = document.getElementsByTagName("input")
                    根据元素的name属性值获得多个元素    var els = document.getElementsByName("aaa")
                    根据元素的class属性值获得多个元素  var els = document.getElementsByClassName("a")
                ② 间接获取
                    通过父元素获取子元素    var parent = document.getElementById("div1");
                    通过父元素获取全部的子元素  var cs=parent.children;
                    通过父元素获取指定的子元素  console.log(parent.firstElementChild)    // 获取第一个子元素
                                              console.log(parent.lastElementChild)     // 获取最后一个子元素
                                              console.log(parent.children[1])          // 获取第二个子元素
                                              console.log(parent.children.item(2))     // 获取第三个子元素
                    根据子元素获取父元素    var child = document.getElementById("username");
                    根据当前元素获取兄弟元素    var pinput = document.getElementById("password")
                    获取前一个兄弟元素  console.log(pinput.previousElementSibling)
                    获取后一个兄弟元素  console.log(pinput.nextElementSibling)
            3.对元素进行操作
                ① 操作元素的属性    语法:元素.属性名 = “属性值”
                ② 操作元素的样式    语法:元素.style.样式名 = “样式值”    原始样式名中的“-”符号转换为驼峰式
                ③ 操作元素的文本    语法:元素.innerHTML = “文本”    只识别文本    
                                        元素.innerText = “文本“    可以同时识别html代码
                ④ 增删元素      
                    创建元素    var csli = document.createElement("li");
                    在父元素中追加子元素     父元素.appendChild(子元素);
                    在指定元素前增加某个元素    cityul.insertBefore(csli,gzli);
                    在父元素中,用某个新元素替换原本的子元素    cityul.replaceChild(新元素, 旧元素);
                    删除当前元素    元素.remove();
                    清空元素    元素.innerHTML = "";
        */

       function addCd() {
        // 创建一个新元素
        // 创建元素
        var cdli = document.createElement("li");
        // 设置子元素的属性和文本
        cdli.id = "cd";
        cdli.innerHTML = "成都";
        // 获取父元素
        var cityul = document.getElementById("city");
        // 将子元素放在父元素之中
        cityul.appendChild(cdli);
       }    

       function addGzBefore() {
        // 创建一个新元素
        // 创建元素
        var hzli = document.createElement("li");
        // 设置子元素的属性和文本
        hzli.id = "hz";
        hzli.innerText = "杭州";
        // 将子元素放入父元素中
        var cityul = document.getElementById("city");
        // 在父元素中追加子元素
        // cityul.insertBefore(新元素, 参考元素);
        // 定义参考元素
        var gzli = document.getElementById("gz");
        cityul.insertBefore(hzli,gzli);
       }

       function replaceBj() {
        // 创建一个新元素
        // 创建元素
        var njli = document.createElement("li");
        // 设置子元素的属性和文本
        njli.id = "nj";
        njli.innerText = "南京";
        // 将子元素放入父元素中
        var cityul = document.getElementById("city");
        // 在父元素中,用某个新元素替换原本的子元素
        // cityul.replaceChild(新元素, 旧元素);
        var bjli = document.getElementById("bj");
        cityul.replaceChild(njli, bjli);
       }

       // 删除深圳
       function removeSZ() {
        var szli=document.getElementById("sz");
        // 哪个元素调用了remove,则该元素就会从dom树中移除
        szli.remove();
       }

       // 清空城市列表
       function clearCity() {
        // 获取父元素
        var cityul = document.getElementById("city");
        var fc = cityul.firstChild;
        while(fc!= null) {
            fc.remove();
            fc = cityul.firstChild;
        }
        // 方式二
        // cityul.innerHTML = ""
        // 方式三
        // cityul.removeChild(cityul.lastChild)

        // 方式四
        // var child = cityul.lastChild;
        // while(child != null) {
        //     cityul.removeChild(child);
        //     child = cityul.lastChild;
        // }
       }    

</script>
<body>
    <ul id="city">
        <li id="bj">北京</li>
        <li id="sh">上海</li>
        <li id="gz">广州</li>
        <li id="sz">深圳</li>
    </ul>
    
    <hr>
     <!-- 目标1:在城市列表的最后添加一个子标签 <li id="cd">成都</li> -->
    <button onclick="addCd()">增加成都</button>
     <!-- 目标2:在城市列表的广州前添加一个子标签 <li id="hz">杭州</li> -->
     <button onclick="addGzBefore()">在广州前插入杭州</button>
     <!-- 目标3:将城市列表中的北京替换为南京 <li id="nj">南京</li> -->
     <button onclick="replaceBj()">替换北京</button>
     <!-- 目标4:将城市列表中删除深圳 <li id="sz">深圳</li> -->
     <button onclick="removeSZ()">删除深圳</button>
     <!-- 目标5:清空城市列表 -->
     <button onclick="clearCity()">清空列表</button>

</body>
</html>

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

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

相关文章

Python 如何进行密码学操作(cryptography模块)

Python 的密码学操作可以通过 cryptography 模块来实现&#xff0c;这个模块是一个功能强大的库&#xff0c;它提供了现代密码学的基本工具&#xff0c;包括加密、解密、密钥生成、签名等操作。cryptography 模块易于使用&#xff0c;并且安全性高&#xff0c;适合在各种场景下…

【软件测试】8. 测试分类

目录 1. 为什么要对软件测试进行分类&#xff1f; 2.按照测试目标分类 2.1 界面测试 2.2 功能测试 2.3 性能测试 2.4 可靠性测试 2.5 安全性测试 2.6 易用性测试 3.按照执行方式分类 3.1 静态测试 3.2 动态测试 4. 按照测试方法 4.1 白盒测试 4.2 黑盒测试 4.3灰…

【WiFi协议的发展学习1】

WiFi协议的发展 WiFi协议的发展2. WiFi协议发展3. WiFi协议发展小结3.1. 发展归纳3.2. 未来展望4. WiFi产品的特点/功能WiFi协议的发展 自20世纪90年代以来, WiFi技术得到了迅猛发展,已成为人们日常生活、工作和学习中不可或缺的组成部分。WiFi协议的发展不仅推动了无线通信…

TL-Tomcat 整体架构和处理请求流程解析

我们写一个servlet后&#xff0c;在web.xml里配上我们的路径。然后把项目打包成war包放入webapps目录下 然后这样就返回了 这个war包里面的东西和这个文件夹其实是一样的&#xff1a; 那么最终我们把war包删掉 还有原来文件夹下其他的东西 只剩下这么个.class文件 其实这…

TikTok流量推送逻辑与IP的关系

在探讨TikTok流量推送逻辑时&#xff0c;很多用户都好奇这一机制是否与用户的IP地址紧密相关。TikTok作为全球知名的短视频社交平台&#xff0c;其流量推送算法无疑是平台成功的关键因素之一。那么&#xff0c;TikTok的流量推送逻辑究竟是如何运作的&#xff1f;它与IP地址之间…

C语言 | Leetcode C语言题解之第385题迷你语法分析器

题目&#xff1a; 题解&#xff1a; struct NestedInteger* helper(const char * s, int * index){if (s[*index] [) {(*index);struct NestedInteger * ni NestedIntegerInit();while (s[*index] ! ]) {NestedIntegerAdd(ni, helper(s, index));if (s[*index] ,) {(*index…

使用InternLM实现谁是卧底游戏

环境 # 创建虚拟环境 conda create -n spy python3.10 -y conda activate spy pip install streamlit1.37.0 openai1.37.1 git clone https://github.com/sci-m-wang/Spy-Game.git cd Spy-Game 修改脚本who_is_the_spy.py中的client 部分 if "client" not in …

pdf转cad软件,5款快速上手转换软件分享

在当今快节奏的工作环境中&#xff0c;图纸文件的格式转换成为设计师、工程师等职业群体日常工作中不可或缺的一环。尤其是将PDF文件转换为CAD格式&#xff0c;不仅能够提升工作效率&#xff0c;还能确保设计数据的准确性和可编辑性。下面给大家分享5款能够快速上手转换软件&am…

快蜗牛OZON数据分析工具,快蜗牛OZON选品工具

现在电商行业蓬勃发展的时代&#xff0c;OZON是俄罗斯及东欧边相当重要的电商平台&#xff0c;它背后的数据里藏着超多商业机会。快蜗牛数据专门针对 OZON 平台搞数据分析的&#xff0c;能帮咱们卖家看透市场&#xff0c;还能指导商家怎么做生意。接下来看快蜗牛对 OZON 的数据…

物理机安装Centos后无法连接网络(网线网络)怎么办?-呕心沥血总结版-超简单

问题情境 高高兴兴的在物理机上装了个centos7,打开一看,哇,网卡没有我的局域网IP,怎么办,已经插上网线了呀,灯也在闪烁,怎么没有网络呀? 其实,是缺少网卡驱动! 问题解决: 1.查询网卡版本 在服务器上输入命令: lspci | grep Ethernet可以看到,我的网卡是RTL8…

Python Excel 操作全面总结

Excel 是我们日常生活中经常使用的数据处理工具&#xff0c;而 Python 作为一种强大的编程语言&#xff0c;在处理 Excel 文件方面也有着广泛的应用。本文将全面总结 Python Excel 操作&#xff0c;包括如何使用 Python 来读取、写入、修改 Excel 文件&#xff0c;以及如何使用…

2024全国大学生数学建模国赛,成员如何分工协作?

文末获取2024国赛数学建模思路代码&#xff0c;9.5开赛后第一时间更新 大家知道&#xff0c;数学建模竞赛是需要一个团队的三个人在三天或四天的时间内&#xff0c;完成模型建立&#xff0c;编程实现和论文写作的任务&#xff0c;对许多第一次参加建模或者建模经验比较欠缺的团…

电饭煲语音应用方案:工业级性能、简单易用,NRK3301语音识别ic

随着人们对电器的需求不断增大&#xff0c;家用电饭煲经过不断地改革和创新&#xff0c;拥有了更多使用的功能&#xff0c;以往电饭煲只用于煮米饭。如今&#xff0c;还增加了煲汤、煮粥、无水焗、收汁入味等十多种功能。 除此之外&#xff0c;如今的电饭煲越来越人性化&#x…

AI周报(8.25-8.30)

AI应用-Beyond Math 的“数字风洞”应用于 F1 赛车 Beyond Math 的首批市场之一是一级方程式赛车&#xff0c;一些车队正在探索使用该软件来加快他们的空气动力学和车辆设计过程。 BeyondMath 的联合创始人达伦加维&#xff08;Darren Garvey&#xff09;告诉TechCrunch&#…

【MySQL-24】万字全面解析<索引>——【介绍&语法&性能分析&使用规则】

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

一文打通前端环境搭建

目录 nvm管理安装nvm 管理node配置nvm环境变量切换nvm国内镜像 安装nodenpm 镜像切换打包工具yarn安装yarnyarn切换淘宝镜像 安装vue脚手架开发工具vscode安装(傻瓜式安装) 启动项目vue插件配置 关于yarmyarm常用命令 nvm管理 安装nvm 管理node 访问github地址&#xff1a;ht…

Electron 项目实战 02:打包和自动更新

技术选型 electron-forgeelectron-builder electron-forge 是Electron 官方文档介绍的&#xff0c;打包和发布都包含了&#xff0c;但是包含的坑也非常多。electron-builder下载量和集成打包非常顺利&#xff0c;本教程也是采用electron-buid来介绍打包。大家在技术选型的时候…

火绒补充| 截止目前修改时间| 本文已上全站总榜33

目录 为什补充&#xff1f; 用户界面优化&#xff1a; 性能提升&#xff1a; 启发式检测和行为分析&#xff1a; 恶意网址拦截&#xff1a; 系统修复功能&#xff1a; 网络安全防护&#xff1a; 云查杀引擎&#xff1a; 漏洞修复和补丁管理&#xff1a; 隐私保护&…

算法的学习笔记—把数组排成最小的数(牛客JZ45)

&#x1f600;前言 在编程面试中&#xff0c;经常会遇到需要将问题转化为排序问题的题目。这些问题看似复杂&#xff0c;但只要抓住核心思路&#xff0c;便能迅速解决。今天我们就来看一道这样的题目&#xff1a;如何将一个非负整数数组拼接成最小的数字。 &#x1f3e0;个人主…

Cracking the Safe

原题链接&#xff1a;https://leetcode.cn/problems/cracking-the-safe/description/ 题目要求的是&#xff0c;某个时刻能够打开保险箱的任一最短密码序列&#xff0c;需要包含所有密码子串。 答案应当是一个字符串&#xff0c;任意长度为n的子串的都是一种密码方案。 对于有n…