【Java 进阶篇】JavaScript DOM 编程:理解文档对象模型

news2024/11/30 0:44:50

在这里插入图片描述

在 web 开发中,DOM(文档对象模型)是一个重要的概念。DOM 是一种将网页文档表示为树状结构的方式,允许开发者使用 JavaScript 来访问和操作网页的内容。本篇博客将详细介绍 DOM,包括什么是 DOM、如何访问 DOM 元素、如何操作 DOM、DOM 事件等。无论你是刚刚入门 web 开发还是希望深入了解 DOM,这篇博客都将对你有所帮助。

什么是 DOM?

DOM 是 Document Object Model(文档对象模型)的缩写。它是一种编程接口,允许开发者使用脚本语言(通常是 JavaScript)来访问和修改网页的内容。DOM 将网页表示为一个树状结构,每个部分都是一个对象,这些对象可以被脚本语言访问和操纵。

DOM 的树状结构如下所示:

请添加图片描述

  • 文档(Document)是整个网页的根节点。
  • 元素(Element)是文档中的标签,如 <div><p><a>
  • 属性(Attribute)是元素的特性,如 idclass
  • 文本(Text)是元素中的文本内容。

如何访问 DOM 元素?

要访问 DOM 元素,你需要使用 JavaScript。下面是一些基本的方法来获取 DOM 元素:

1. 通过 ID 获取元素

var element = document.getElementById("myElement");

上面的代码会获取具有 id 属性为 “myElement” 的元素。

2. 通过标签名获取元素

var elements = document.getElementsByTagName("p");

上面的代码将获取所有 <p> 元素。

3. 通过类名获取元素

var elements = document.getElementsByClassName("myClass");

上面的代码将获取所有 class 属性为 “myClass” 的元素。

4. 通过选择器获取元素

var element = document.querySelector("#myElement");

上面的代码将获取具有 id 属性为 “myElement” 的元素。querySelector 还支持更复杂的选择器。

5. 通过父元素获取子元素

var parentElement = document.getElementById("parent");
var childElement = parentElement.querySelector(".child");

上面的代码首先获取具有 id 属性为 “parent” 的元素,然后从该元素中获取具有 class 属性为 “child” 的子元素。

如何操作 DOM?

一旦你获取了 DOM 元素,你就可以对其进行各种操作。以下是一些常见的 DOM 操作:

1. 改变元素的文本内容

var element = document.getElementById("myElement");
element.innerHTML = "新的文本内容";

上面的代码将改变 id 为 “myElement” 的元素的文本内容。

2. 改变元素的样式

var element = document.getElementById("myElement");
element.style.color = "red";

上面的代码将改变 id 为 “myElement” 的元素的文本颜色为红色。

3. 添加和移除 CSS 类

var element = document.getElementById("myElement");
element.classList.add("newClass");
element.classList.remove("oldClass");

上面的代码将为 id 为 “myElement” 的元素添加一个新的 CSS 类,并移除一个旧的 CSS 类。

4. 创建新元素

var newElement = document.createElement("div");
newElement.innerHTML = "新的元素";

上面的代码将创建一个新的 <div> 元素,并设置其文本内容。

5. 添加和移除子元素

var parentElement = document.getElementById("parent");
var childElement = document.createElement("div");
parentElement.appendChild(childElement); // 添加子元素
parentElement.removeChild(childElement); //移除子元素

上面的代码首先获取具有 id 属性为 “parent” 的元素,然后创建一个新的 <div> 元素,并将其作为子元素添加到 “parent” 元素中。随后,使用 removeChild 方法将子元素移除。

6. 修改元素的属性

var element = document.getElementById("myElement");
element.setAttribute("title", "新的标题");

上面的代码将改变 id 为 “myElement” 的元素的 title 属性。

7. 获取元素的属性值

var element = document.getElementById("myElement");
var title = element.getAttribute("title");

上面的代码将获取 id 为 “myElement” 的元素的 title 属性值。

8. 添加事件监听器

var button = document.getElementById("myButton");
button.addEventListener("click", function() {
  alert("按钮被点击了!");
});

上面的代码将为 id 为 “myButton” 的按钮元素添加一个点击事件监听器,当按钮被点击时,将弹出一个提示框。

DOM 事件

DOM 事件是 web 开发中的一个关键概念,允许开发者对用户与网页的交互作出响应。以下是一些常见的 DOM 事件:

1. click 事件

click 事件在元素被点击时触发。你可以为按钮、链接或其他元素添加 click 事件监听器,以便在用户点击时执行相应的操作。

var button = document.getElementById("myButton");
button.addEventListener("click", function() {
  alert("按钮被点击了!");
});

2. mouseover 和 mouseout 事件

mouseover 事件在鼠标指针移入元素时触发,而 mouseout 事件在鼠标指针移出元素时触发。这些事件可用于创建悬停效果。

var element = document.getElementById("myElement");
element.addEventListener("mouseover", function() {
  element.style.backgroundColor = "yellow";
});

element.addEventListener("mouseout", function() {
  element.style.backgroundColor = "white";
});

上面的代码将在鼠标指针移入元素时将元素的背景颜色更改为黄色,而在鼠标指针移出元素时将其还原为白色。

3. keydown 事件

keydown 事件在用户按下键盘上的键时触发。你可以使用这个事件来捕获用户的按键操作,例如输入文本或控制游戏。

document.addEventListener("keydown", function(event) {
  if (event.key === "Enter") {
    alert("Enter 键被按下了!");
  }
});

上面的代码将在用户按下 Enter 键时触发一个提示框。

4. submit 事件

submit 事件在表单提交时触发。你可以使用这个事件来验证用户输入或执行其他操作,然后阻止表单提交或继续提交。

var form = document.getElementById("myForm");
form.addEventListener("submit", function(event) {
  if (!validateForm()) {
    event.preventDefault(); // 阻止表单提交
  }
});

上面的代码将在表单提交时调用 validateForm 函数来验证用户的输入,如果验证失败,则阻止表单提交。

总结

DOM 是 web 开发中的一个关键概念,它允许开发者使用 JavaScript 来访问和操作网页的内容。通过获取元素、改变文本内容、操作样式、添加事件监听器和处理事件,你可以创建交互性丰富的网页。在深入学习 web 开发时,掌握 DOM 操作是必不可少的一部分。

希望本篇博客能够帮助你更好地理解 DOM,以及如何使用 JavaScript 进行 DOM 编程。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

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

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

相关文章

华为云云耀云服务器L实例评测|企业项目最佳实践之压测 (十一)

十二、云服务器压测&#xff1a; 服务器压测可以选择工具sysbench&#xff0c;它可以模拟几千个线程并发的访问实例。作为一款广泛使用的开源模块化的、跨平台、多线程基准测试工具&#xff0c;sysbench主要用于评估服务器系统在不同负载条件下的性能表现。 sysbench具有简单易…

PYTHON进阶-面向对象编程

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

基于Java的家电销售网站管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域…

C++位图和布隆过滤器

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容介绍C中的位图和布隆过滤器模拟实现和简单的应用 文章目录 …

求直角三角形第三点的坐标

文章目录 求直角三角形第三点的坐标1. 原理2. 数学公式3. 推导过程 求直角三角形第三点的坐标 1. 原理 已知内容有&#xff1a; P1、P2 两点的坐标&#xff1b; dis1 为 P1与P2两点之间的距离&#xff1b; dis2 为 P2与P3两点之间的距离&#xff1b; 求解&#xff1a; …

10、网络防火墙的设置

1、查看防火墙是否开启 systemctl status firewalld 此图表示防火墙已开启&#xff0c;如果未开启可使用systemctl start firewalld开启 2、查看已开启的端口 firewall-cmd --list-ports 默认无打开的端口 3、打开80端口 firewall-cmd --zonepublic --add-port80/tcp --p…

stm32备份

存储器的分类&#xff1a; 存储器首先根据断电后存储的数据是否会丢失&#xff0c;可以分为易失存储器和非易失存储器&#xff0c;易失存储器主要应用于内存&#xff0c;非易失存储器主要用于外存。 易失存储器以RAM随机存储器为代表&#xff0c;随机的含义是存储器中的数据读取…

EfficientDet: Scalable and Efficient Object Detection

CVPR2020 V7 Mon, 27 Jul 2020 引用量&#xff1a;243 机构&#xff1a;Google 贡献&#xff1a;1>提出了多尺度融合网络BiFPN 2>对backbone、feature network、box/class prediction network and resolution进行复合放缩&#xff0c;有着不同的…

Linux第4章-目录结构

引子 在Linux中&#xff0c;一切皆文件&#xff01;&#xff01;&#xff01; 在Linux中&#xff0c;一切皆文件&#xff01;&#xff01;&#xff01; 在Linux中&#xff0c;一切皆文件&#xff01;&#xff01;&#xff01; 基本介绍 1.Linux的文件系统&#xff0c;是采用…

LoRA 是如何工作的?

概述 纯笔记 LoRA的原理 LoRA其实是对稳定扩散模型最关键的部分进行了微小的改变。 这个关键的部分叫&#xff1a;cross-attention layers – 交叉注意力层。 研究人员发现&#xff0c;对这关键部分进行微调就足以实现良好的训练。 上面黄色部分&#xff0c;QKV 部分就是&a…

Python进阶之迭代器

文章目录 前言一、迭代器介绍及作用1.可迭代对象2. 迭代器 二、常用函数和迭代器1.常用函数2.迭代器 三、总结结束语 &#x1f482; 个人主页:风间琉璃&#x1f91f; 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注…

ELK 日志分析系统介绍与部署

目录 一、ELK 简介: 1.开源工具介绍&#xff1a; 2.其它组件&#xff1a; 2.1 Filebeat&#xff1a; 2.2 Fluentd&#xff1a; 2.3 缓存/消息队列&#xff08;redis、kafka、RabbitMQ等&#xff09;&#xff1a; 3. filebeat 结合 logstash 带来好处&#xff1a; 二、为什么要…

zookeeper源码学习笔记(一)

一、缘起 1、CP还是AP 作为一个在大数据行业工作了7&#xff5e;8年的老兵&#xff0c;在被问到zookeeper和CAP时&#xff0c;竟然有些恍惚&#xff0c;AP还是CP&#xff1f; 看了一些博文&#xff0c;答案几乎都是CP&#xff1f; zookeeper的实现中&#xff0c;P是一定的&…

【C语言】.c源文件从编译到链接生成可执行程序的过程

本篇文章目录 1. 过程概览2. 编译与链接2.1 预编译/预处理2.2 编译2.3 汇编2.4 链接 3. 执行/运行环境 1. 过程概览 编译到链接是c语言的翻译环境&#xff0c;c语言还有执行环境。 组成一个程序的每个源文件通过编译过程分别转换成目标代码&#xff08;object code&#xff09;…

推荐《一拳超人》

《一拳超人》是ONE原作&#xff0c;村田雄介作画&#xff0c;连载于网络漫画杂志《邻座的Young jump》上的漫画。 [1] 原为ONE在个人网站上连载的练笔之作&#xff0c; [2] 后被喜爱该作的另一漫画家村田雄介在征得ONE同意后重新绘制而成。 简体中文电子版由哔哩哔哩漫画发布…

JavaSE学习值之--认识异常

&#x1f495;"有效知识的前提是承认知识边界&#xff0c;承认我们对边界那边的一切无可奉告。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;JavaSE学习值之--认识异常 一.什么是异常&#xff1f; 异常就是程序在运行的时候产生的不正常的行为 …

java_Stream API

文章目录 一、Stream API vs 集合二、Stream 使用的执行流程2.1、创建Stream2.1、中间操作2.1.1. filter2.1.2. limit2.1.3. skip2.1.4. distinct2.1.5. map2.1.6. sorted 一、Stream API vs 集合 Stream API 关注的是多个数据的计算&#xff08;排序、查找、过滤、映射、遍历…

网络工程师知识点4

51、OSPF的LSA类型 52虚链路&#xff1a;作用 解决区域划分不合理的问题 通过建立虚拟链路来实现一般区域与骨干区域的理论化直连 54、NSSA区域的特点 1、可以学习本区域连接的外部路由 2、不学习其他区域转发进来的外部路由 3、与外部区域通信使用ABR自动产生的默认路…

python:爬取网络小说,看这一篇就够了

说明&#xff1a; 本教程仅供于学习研究使用&#xff0c;请勿用于其他用途。 软件安装&#xff1a; 官网下载visual studio Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com) 点进网页后下拉找到个人免费版本。点击下载即可。 1&#xff1a;找到…

第六章:TF-A学习

TF-A学习 TF-A初探如何获取系统源码移植过程中遇到的问题和解决方案编译报错&#xff1a;arm-none-linux-gnueabi-gcc: not foundTF-A 源码打补丁 遇到assume -R&#xff1f;[n] TF-A初探 为了保证安全 ARM 推出了 Arm Trusted Firmware 的可信固件&#xff0c;简称 TF-A。它…