WEB前端07-DOM对象

DOM模型
  • 1.DOM概念

文档对象模型属于BOM的一 部分,用于对BOM中的核心对象document进行操作,它是一种与平台、语言无关的接口,允许程序和脚本动态地访问或更新HTML、XML文档的内容、结构和样式,且提供了一系列的函数和对象来实现访问、添加、修改及删除操作。

  • 2.DOM树

DOM将网页中文档的对象关系规划为节点层级,构成它们之间的等级关系,这种各对象间的层次结构被 称为节点树。一个文档的树形结构是由各种 不同的节点组成,Html代表根 节点。除了根节点以外,每个 节点都有一个父节点;每个节 点也可以有许多子节点;具有 相同父节点的节点叫兄弟节点

<!DOCTYPE html>
<html lang="en">
<head><title>DOM TREE</title>
</head>
<body><h1>DOM 模型</h1><ul><li></li><li></li></ul>
</body>
</html>

image-20240717174055145

  • 3.DOM基本组成:
核心DOM对象
* Document:文档对象
* Element:元素对象
* Attribute:属性对象
* Text:文本对象
* Comment:注释对象* Node:节点对象,其他5个的父对象
  • 4.Document文档对象

访问指定元素的方法

**方法一:**可以通过id、name、class及标签名来访问指定的元素。

类型方法
document.getElementById()获取拥有指定ID的第一个元素对象的引用
document.getElementsByName()获取带有指定名称的元素对象集合。返回值是一个数组
document.getElementsByTagName()获取带有指定标签名的元素对象集合。返回值是一个数组
document.getElementsByClassName()获取指定class的元素对象集合。返回值是一个数组

**方法二:**访问指定的元素的父,子,兄弟元素

image-20231230195347471

值得注意的是:在选用方法二时,一般会有默认空白的注释标签

创建其他DOM对象

document.createAttribute(name)
document.createComment()
document.createElement()
document.createTextNode()
  • 5.Element元素对象

获取:document.createElement()

方法:

1. removeAttribute("属性名"):删除属性
2. setAttribute("属性名", "属性值"):设置属性
  • 6.Node节点对象

所有dom对象都可以被认为是一个节点

方法:

* appendChild():向节点的子节点列表的结尾添加新的子点。
* removeChild()	:删除(并返回)当前节点的指定子节点。
* replaceChild():用新节点替换一个子节点。

属性:

image-20231230195347471

  • 案例:动态表格

实现了一个动态表格功能,用户可以通过输入编号、姓名和性别后点击提交按钮,将输入的数据动态添加为表格的新行。每行包含编号、姓名、性别和一个可点击的删除操作,点击删除链接即可移除对应行。JavaScript负责创建新的表格行和处理删除操作,使得用户可以实时管理和更新表格中的数据。

image-20240718184920943

//添加行功能总结:
JavaScript代码通过以下步骤实现了添加新行的功能:
获取用户在输入框中输入的编号、姓名和性别。
创建新的表格行 (<tr>) 和单元格 (<td>)。
为每个单元格添加用户输入的数据作为文本节点。
创建一个带有"删除"文本的链接 (<a>),设置其点击事件为调用删除函数。
将创建的单元格依次添加到新的表格行中。
将新创建的表格行添加到现有表格的末尾,实现动态添加数据行的效果。//删除行功能总结:
JavaScript代码通过以下步骤实现了删除行的功能:
编写一个删除函数 delTr(obj),该函数接受一个参数 obj,代表被点击的删除链接元素 (<a>)。
通过 obj.parentNode.parentNode 获取到要删除的表格行 (<tr>)。
使用 removeChild 方法从表格中移除获取到的表格行 (<tr>),实现了点击删除链接后删除对应的数据行。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>动态表格</title><style>.div_1 {text-align: center;}table, td, th {border: 1px solid;}table {margin: auto;}td, th {width: 150px;}caption {font-size: 30px;}</style>
</head>
<body><div class="div_1"><input type="text" name="id" id="id" placeholder="请输入编号"><input type="text" name="name" id="name" placeholder="请输入用户名"><input type="text" name="sex" id="sex" placeholder="请输入性别"><input type="button" value="提交" id="bn_add"></div>    <div class="div_2"><table><caption>学生信息表</caption><tr><th>编号</th><th>姓名</th><th>性别</th><th>操作</th></tr><tr><td>1</td><td>张三</td><td></td><td><a href="javascript:void(0);" onclick="delTr(this);" >删除</a></td></tr></table></div><script>function delTr(obj) {let table = obj.parentNode.parentNode.parentNode;let tr = obj.parentNode.parentNode;table.removeChild(tr);}let add = document.getElementById("bn_add");add.onclick = function() {//添加idlet id_text = document.getElementById("id").value;let lie1 = document.createElement("td");let text1 = document.createTextNode(id_text);lie1.appendChild(text1);//添加姓名let name_text = document.getElementById("name").value;let lie2 = document.createElement("td");let text2 = document.createTextNode(name_text);lie2.appendChild(text2);//添加年龄let sex_text = document.getElementById("sex").value;let lie3 = document.createElement("td");let text3 = document.createTextNode(sex_text);lie3.appendChild(text3);//添加操作let lie4 = document.createElement("td");let a = document.createElement("a");a.setAttribute("href", "javascript:void(0);");a.setAttribute("onclick", "delTr(this);");let text4 = document.createTextNode("删除");a.appendChild(text4);lie4.appendChild(a);let row = document.createElement("tr");row.appendChild(lie1);row.appendChild(lie2);row.appendChild(lie3);row.appendChild(lie4);//6.获取tablevar table = document.getElementsByTagName("table")[0];table.appendChild(row);}</script>
</body>
</html>
3.HTML DOM对象
  • 简介

HTML DOM是一种编程接口,它表示网页文档的结构化模型。它将整个网页作为一个树形结构表示,其中每个元素(如标签、属性、文本等)都是树的一个节点。HTML DOM 提供了一组对象,这些对象允许开发者通过脚本语言来操作网页的各个部分。例如,可以通过HTML DOM来获取元素、改变元素的内容、修改元素的样式、添加或删除元素等操作。这使得开发者能够创建动态、交互式的网页应用程序。

  • 标签体的设置和获取:innerHTML
//获取table标签的内容
let content = table.innerHTML
//动态表格改进方案
<script>function delTr(obj) {let table = obj.parentNode.parentNode.parentNode;let tr = obj.parentNode.parentNode;table.removeChild(tr);}let add = document.getElementById("bn_add");add.onclick = function() {//添加idlet id_text = document.getElementById("id").value;//添加姓名let name_text = document.getElementById("name").value;//添加年龄let sex_text = document.getElementById("sex").value;let table = document.getElementsByTagName("table")[0];table.innerHTML += "<td>" + id_text + "</td>" + "<td>" + name_text + "</td>"+ "<td>" + sex_text + "</td>" + "<td><a href='javascript:void(0);' οnclick='delTr(this);'>删除</a></td>";}
</script>
  • 使用html元素对象的属性

HTML DOM对象有很多,这里不展开叙述,可以W3C学习,这里只了解一下Form对象

Form对象

  • Form对象的引用
表单的引用方法1:通过i数组来访问
document.forms[0]表单的引用方法2:通过id值来访问
document.forms[“MyForm”]
document.MyForm表单的引用方法3:用document对象的getElementById方法来访问
document.getElementById(“MyForm”)
  • Form表单的属性与方法

image-20231230205024694

  • 控制元素样式
<body><div class="div1">你好</div><style>.d1 {color: red;}
</style><script>//方法一:通过document获取元素对象,调用其style属性进行修改样式let div1 = document.getElementsByClassName("div1")[0];div1.style.border = "3px solid";div1.style.fontSize = "50px";//方法二:提前定义好类选择器的样式,通过元素的className属性来设置其class属性值div1.className = "d1";
</script></body>
4.事件机制

**事件机制:**某些组件被执行了某些操作后,触发某些代码的执行

事件机制分为

事件:某些操作。如: 单击,双击

事件源:事件源:组件。如: 按钮 文本输入框…

事件处理程序(监听器):代码

事件处理的过程:触发事件,启动事件处理程序,事件处理程序做出反映

  • 事件分类

鼠标,键盘事件

image-20240719105812688

//鼠标和键盘事件常常会监听获取哪个键被点击
* 定义方法时,定义一个形参,接受event对象。
* event对象的button属性可以获取哪个鼠标按钮键被点击了
* event对象的keyCode属性可以获取哪个键盘按钮键被点击了
document.getElementById("username").onmousedown = function(event){// alert("鼠标点击了....");
alert(event.button);}document.getElementById("username").onkeydown = function(event){// alert("鼠标点击了....");if(event.keyCode == 13){alert("提交表单");}
}

表单事件

image-20231230200705193

//onblur失去焦点:常常被用作表单的校验
//onsubmit事件会对提交进行阻拦,如果函数返回值未true放行,如果为false进行阻拦
document.getElementById("form").onsubmit = function(){var flag = false;return flag;
}

窗口事件

image-20231230200726025

//onload用法
一般js代码放在最后,防止因为访问未定义的标签或元素报错
onload事件是在文档完全加载完成触发事件,这样可有效解决上述问题语法:window.onload = function() {//执行的js代码
}
  • 绑定事件
  1. 使用addEventListener方法:

    javascriptCopy Codeconst element = document.getElementById('myElement'); // 获取要绑定事件的元素
    element.addEventListener('click', function() {// 处理点击事件的代码
    });
    

    这种方式可以为元素添加多个不同类型的事件监听器,例如clickmouseoverkeydown等。

  2. 直接赋值事件处理程序:

    javascriptCopy Codeconst element = document.getElementById('myElement');
    element.onclick = function() {// 处理点击事件的代码
    };
    

    这种方式比较旧式,但仍然有效。但是,它只能为每种事件类型设置一个处理程序,并且不支持添加多个处理程序。

  3. 使用HTML属性(不推荐):

    htmlCopy Code<button id="myButton" onclick="handleClick()">Click me</button>
    
    javascriptCopy Codefunction handleClick() {// 处理点击事件的代码
    }
    

    这种方式将事件处理程序直接嵌入到HTML中,不推荐使用,因为它将结构(HTML)和行为(JavaScript)混合在一起,不利于维护和扩展。

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

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

相关文章

Vue从零到实战基础篇

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

C语言丢失精度 如何实现高精度计算

&#xff08;1&#xff09;int 类型举例 int &#xff1a;占4个字节&#xff0c;也就是32位&#xff0c;及最大值是2^32-11024*1024*1024*4-14294967295 以上说法错误&#xff0c;因为Int是有符号类型整数&#xff0c;所以最高位是符号位&#xff0c;及int的最大值应该是2^31…

spring是如何解决循环依赖的,为什么不是两级

1. Spring使用三级缓存来解决循环依赖问题 Spring使用三级缓存来解决循环依赖问题&#xff0c;‌而不是使用两级缓存。‌ 在Spring框架中&#xff0c;‌解决循环依赖的关键在于正确地管理Bean的生命周期和依赖关系。‌循环依赖指的是两个或多个Bean相互依赖&#xff0c;‌如果…

VC运营指南:提升亚马逊VC账户销量的策略——WAYLI威利跨境助力商家

亚马逊VC作为供应商中心账户&#xff0c;其运营策略与普通的第三方卖家账户有所不同。想要在此平台上取得卓越的销售业绩&#xff0c;需要深入理解和运用一系列策略。 1、产品策略是基石 深入市场研究&#xff0c;了解消费者的真实需求&#xff0c;是选择产品的关键。只有选对…

vue echarts 柱状图表,点击柱子,路由代参数(X轴坐标)跳转

一 myChart.on(click, (params) > {if (params.componentType series && params.dataIndex ! undefined) {const months this.month_htqd[params.dataIndex]; // 获取点击柱状图的 X 轴坐标值alert(点击了柱状图&#xff0c;值为: ${months});// 根据点击的柱状图…

7.SpringBoot整合Neo4j

1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-neo4j</artifactId> </dependency> 说明&#xff1a;这里引入neo4j的版本跟spring框架的版本有关系。需要注意不同的版本在neo…

poi库简单使用(java如何实现动态替换模板Word内容)

目录 Blue留言&#xff1a; Blue的推荐&#xff1a; 什么是poi库&#xff1f; 实现动态替换 第一步&#xff1a;依赖 第二步&#xff1a;实现word模板中替换文字 模板word&#xff1a; 通过以下代码&#xff1a;&#xff08;自己建一个类&#xff0c;随意取名&#xf…

Qt 制作安装包

记录使用Qt工具制作一个安装包的过程 目录 1.准备工作 1.1检查Qt Installer Frameworks是否安装 1.2.安装Qt Installer Frameworks 1.3准备release出来的exe dll等文件 2.创建打包工程所需要的文件及目录 2.1创建子目录 2.2 创建工程文件 2.3 创建config/config.xml …

C语言 ——— 打印水仙花数

目录 何为水仙花数 题目要求 代码实现 何为水仙花数 “水仙花数”是指一个n位数&#xff0c;其各位数字的n次方之和等于该数本身 如&#xff1a;153 1^3 5^3 3^3&#xff0c;则153就是一个“水仙花数” 题目要求 求出0~100000的所有“水仙花数”并输出 代码实现 #i…

华为机试HJ97记负均正

华为机试HJ97记负均正 题目&#xff1a; 想法&#xff1a; 遍历输入的列表&#xff0c;记录所有负数的个数&#xff0c;记录所有正数的个数&#xff0c;并累加所有正数&#xff0c;最终获得所有负数的个数和正数的平均值 input_number input() input_number_list input().…

华为od机试真题 — 分披萨(Python)

题目描述 “吃货”和“馋嘴”两人到披萨店点了一份铁盘(圆形)披萨&#xff0c;并嘱咐店员将披萨按放射状切成大小相同的偶数个小块。 但是粗心服务员将披萨切成了每块大小都完全不同奇数块&#xff0c;且肉眼能分辨出大小。 由于两人都想吃到最多的披萨&#xff0c;他们商量…

QT5:简单显示百度页面

目录 前言 一、环境 二、实现过程 1.引入模块 2.环境构建 三、代码示例 总结 参考博客 前言 使用qt5 QT WebEngine 模块实现在Designer 上展示百度页面。 一、环境 qt版本&#xff1a;5.12.7 windows 11 下的 Qt Designer &#xff08;已搭建&#xff09; 编译器&a…

达梦数据库DM8-索引篇

目录 一、前景二、名词三、语法1、命令方式创建索引1.1 创建索引空间1.2.1 创建普通索引并指定索引数据空间1.2.2 另一种没验证&#xff0c;官方写法1.3 复合索引1.4 唯一索引1.5 位图索引1.6 函数索引 2、创建表时候创建索引3、可视化方式创建索引3.1 打开DM管理工具3.2 找到要…

Java IO流(详解)

目录 1.概述 2.File文件类 2.1 文件的创建操作 2.2 文件的查找操作 3. File里面一些其他方法 3.1 经典案例 4. IO流 4.1 概念 4.2 IO分类 4.3 字节输出流 4.4 字节输入流 4.5 案例 4.6 字符输出流 4.7 字符输入流 4.8 案例 4.9 处理流--缓冲流 4.10 对象流: 1.…

源代码加密软件哪家好?2024八款源代码加密软件排行榜

源代码加密软件哪家好&#xff1f;2024八款源代码加密软件排行榜 在数字化时代&#xff0c;源代码作为软件开发的生命线&#xff0c;其安全性对于企业来说至关重要。源代码加密软件是保护这一宝贵资产的有力工具&#xff0c;它们通过加密技术防止源代码被非法访问、复制或修改…

人、智能、机器人……

在遥远的未来之城&#xff0c;智能时代如同晨曦般照亮了每一个角落&#xff0c;万物互联&#xff0c;机器智能与人类智慧交织成一幅前所未有的图景。这座城市&#xff0c;既是科技的盛宴&#xff0c;也是人性与情感深刻反思的舞台。 寓言&#xff1a;《智光与心影》 在智能之…

字节面试:如何让单机下Netty支持百万长连接?

最近有同学在面试遇到了一道非常有深度的面试题&#xff1a; 如何让单机下Netty支持百万长连接&#xff1f; 当时在群里问小北&#xff0c;我发现我也没有系统化的梳理过这个问题&#xff0c;所以一时也没有回答的特别好。 痛定思痛的我赶紧去各种搜集资料&#xff0c;系统化的…

(三)原生js案例之滚动到底部解锁按钮状态

业务主要是注册页面&#xff0c;有很长的条款需要用户去读&#xff0c;必须确认用户是不是看到全部的条款&#xff0c;这个场景下可以使用 效果 代码实现 必要的css <style>*{padding: 0;margin: 0;}ul{list-style: none;width: 330px;height: 100%;/* height: 200px;…

kotlin compose 实现应用内多语言切换(不重新打开App)

1. 示例图 2.具体实现 如何实现上述示例,且不需要重新打开App ①自定义 MainApplication 实现 Application ,定义两个变量: class MainApplication : Application() { object GlobalDpData { var language: String = "" var defaultLanguage: Strin…

DA-SVM多变量分类预测|蜻蜓优化算法-支持向量机|Matalb

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、原理介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&a…