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://www.mzph.cn/web/46669.shtml

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

相关文章

工作边界感

工作边界 **明确工作边界****尊重他人的工作边界**&#xff1a;**建立有效的沟通机制**&#xff1a;**制定明确的规则和流程**&#xff1a;**保持开放和包容的心态**&#xff1a;**寻求专业支持**&#xff1a; 在程序员的日常工作中&#xff0c;会遇到很多边界问题。如果这些边…

【人工智能大模型】文心一言介绍以及基本使用指令

目录 一、产品背景与技术基础 二、主要功能与特点 基本用法 指令的使用 注意事项 文心一言&#xff08;ERNIE Bot&#xff09;是百度基于其文心大模型技术推出的生成式AI产品。以下是对文心一言的详细介绍&#xff1a; 一、产品背景与技术基础 技术背景&#xff1a;百度…

基于Gunicorn、Flask和Docker的高并发部署

1. 引言 你好&#xff0c;我是悦创。 随着互联网应用的不断发展&#xff0c;如何高效地处理高并发请求成为了每个开发者需要解决的关键问题。本文将详细介绍如何使用 Gunicorn、Flask 和 Docker 来实现一个高并发部署模型&#xff0c;确保应用在高并发情况下依然能够高效稳定…

NOMAD: Non-Exclusive Memory Tiering via Transactional Page Migration——论文泛读

OSDI 2024 Paper CXL论文阅读笔记整理 问题 随着可字节寻址存储设备的出现&#xff0c;如CXL内存、持久内存和存储类内存&#xff0c;分层存储系统已成为现实&#xff0c;不同层具有不同的特性&#xff0c;如速度、大小、功耗和成本。分层内存管理的核心是操作系统&#xff0…

vmware虚拟机中,Centos安装Docker,解决国内无法访问

背景 本文主要解决了centos 的yum源 无法更新 和 docker的 源 国内无法访问的问题。 本文环境&#xff1a;windows宿主机装了vmware虚拟机&#xff0c;虚拟机中安装了Centos&#xff0c;centos内装docker。其实可以直接在window装docker desktop for windows&#xff0c;但…

技术选型_001_应用场景及编程语言

文章目录 Web开发桌面应用数据分析 不同编程语言有不同的适用场景及生态&#xff0c;这里仅记录作为个人开发者接触过的场景&#xff0c;不考虑企业侧因素&#xff0c;完全从开发效率及性能&#xff0c;包大小等因素考虑&#xff0c;因目前个人只接触过应用层开发&#xff0c;后…

uniapp 获取自定义组件的高度

在 UniApp 中&#xff0c;要获取自定义组件的高度&#xff0c;可以使用uni.createSelectorQuery()方法结合res.node和res.height来实现。 首先&#xff0c;在父组件的代码中&#xff0c;给自定义组件添加一个 ref 属性&#xff0c;例如&#xff1a; <template><view…

VS C#类文件自动生成头部注释

VS C#类文件自动生成头部注释&#xff08;以VS2019为例&#xff09; 1、更新位置 E:\VS2019\vs_2019\Common7\IDE\ItemTemplates\CSharp\Code\2052\Class 2、替换Class 原始文件 using System; using System.Collections.Generic; $if$ ($targetframeworkversion$ > 3.5…

【代码随想录】【算法训练营】【第58天 3】 [卡码103]水流问题 [卡码104]建造最大岛屿

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 58&#xff0c;周四&#xff0c;ding~ 题目详情 [卡码103] 水流问题 题目描述 卡码103 水流问题 LeetCode类似题目417 太平洋大西洋水流问题 解题思路 前提&#xff1a; 思路&#xff1a; 重…

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 …

数据结构第35节 性能优化 算法的选择

算法的选择对于优化程序性能至关重要。不同的算法在时间复杂度、空间复杂度以及适用场景上有着明显的差异。下面我将结合具体的代码示例&#xff0c;来讲解几种常见的算法选择及其优化方法。 示例 1: 排序算法 场景描述: 假设我们需要对一个整数数组进行排序。 算法选择: …

创建鸿蒙手机模拟器(HarmonyOS Emulator)

文 | Promise Sun 一.前提条件&#xff1a; 鸿蒙项目开发需要使用模拟器进行开发测试&#xff0c;但目前想在DevEco Studio开发工具中使用模拟器就必须到华为官网进行报名申请&#xff0c;参加“鸿蒙模拟器&#xff08;HarmonyOS Emulator&#xff09;Beta活动申请”。 申请审…

好用的Ubuntu下的工具合集[持续增加]

1. 终端工具 UBUNTU下有哪些好用的终端软件? - 知乎 (zhihu.com) sudo apt install terminator

计算机课设——基于Java web的超市管理系统

smbms_java_web 基于Java web的超市管理系统&#xff0c;数据库课程设计 1.引言 是一个基于Java Web连接MySQL的小项目。 超市管理系统(smbms)作为每个计算机专业的大学生都是一个很好的练手项目&#xff0c;逻辑层次分明&#xff0c;基础功能包括用户的登录和注销&#xff…

【日常记录】【插件】excel.js导出的时候给单元格设置下拉选择、数据校验等

文章目录 1. 代码基本结构2. 导出的excel 某单元格的值设置为下拉选择3. 如何把下拉选择项设置为动态4. 单元格设置校验、提示5. 在WPS上的设置 1. 代码基本结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><…

韦东山嵌入式linux系列-驱动进化之路:设备树的引入及简明教程

1 设备树的引入与作用 以 LED 驱动为例&#xff0c;如果你要更换LED所用的GPIO引脚&#xff0c;需要修改驱动程序源码、重新编译驱动、重新加载驱动。 在内核中&#xff0c;使用同一个芯片的板子&#xff0c;它们所用的外设资源不一样&#xff0c;比如A板用 GPIO A&#xff0c…

SpringBoot集成EasyExcel实现模板写入多个sheet导出

EasyExcel使用模板导出多个sheet 开发环境 开发环境 SpringBoot2.6EasyExcel3.2.1 //第一种输出到指定目录 public static void main(String[] args) throws FileNotFoundException {InputStream inputStream new FileInputStream(new File("模板位置"));InputStre…

ES6 模块

ES6 模块学习记录 ES6&#xff08;ECMAScript 2015&#xff09;模块是JavaScript官方的标准模块系统。它允许开发者以模块化的方式编写代码&#xff0c;模块可以在不同的文件之间进行组织和重用。 基本特征 默认导出&#xff08;Default Exports&#xff09;&#xff1a;每个…

PHP MySQL 读取数据

PHP MySQL 读取数据 PHP和MySQL是Web开发中的经典组合&#xff0c;广泛用于创建动态网站和应用程序。在PHP中读取MySQL数据库中的数据是一项基本技能&#xff0c;涉及到连接数据库、执行查询以及处理结果集。本文将详细介绍如何使用PHP从MySQL数据库中读取数据。 1. 环境准备…

基于python的京东VR眼镜口碑情感分析,包括lda和情感分析

第1章 绪论 1.1选题背景 在当今科技发展迅速的时代&#xff0c;虚拟现实&#xff08;VR&#xff09;技术作为一种前沿的数字体验方式受到越来越多人的关注。京东作为中国领先的电商平台&#xff0c;推出的VR眼镜备受消费者关注。通过对京东VR眼镜口碑进行情感分析&#xff0c…