【JavaScript】6.DOM

news/2024/4/30 4:12:18/文章来源:https://blog.csdn.net/weixin_46293452/article/details/130259504

文章目录

  • DOM
    • 1. 简介
    • 2. 获取元素
      • 2.1 根据 ID 获取
      • 2.2 根据标签名获取
      • 2.3 通过 HTML5 新增的方法获取
      • 2.4 特殊元素获取
    • 3. 事件基础
      • 3.1 事件概述
      • 3.2 事件三要素
      • 3.3 执行事件步骤

DOM

1. 简介

文档对象模型(Document Object Model,简称 DOM),是 W3C 组织推荐的处理可扩展标记语言(HTML 或者XML)的标准编程接口

在这里插入图片描述

  • 文档:一个页面就是一个文档,DOM 中使用 document 表示
  • 元素:页面中的所有标签都是元素,DOM 中使用 element 表示
  • 节点:网页中的所有内容都是节点(标签、属性、文本、注释等),DOM 中使用 node 表示

DOM 把以上内容都看做是对象

2. 获取元素

  • 获取页面中的元素可以使用以下几种方式:
  • 根据 ID 获取
  • 根据标签名获取
  • 通过 HTML5 新增的方法获取
  • 特殊元素获取

2.1 根据 ID 获取

使用 getElementById() 方法可以获取带有 ID 的元素对象

使用 console.dir() 可以打印获取的元素对象,更好的查看对象里面的属性和方法

document.getElementById('id');
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>getElementById获取元素</title>
</head>
<body><div id="time">2023-2-28</div><script>// 返回的是一个元素对象var timer = document.getElementById('time');console.log(timer);console.log(typeof timer);// console.dir 打印返回的元素对象 更好的查看里面的属性和方法console.dir(timer);</script>
</body>
</html>

在这里插入图片描述

2.2 根据标签名获取

使用 getElementsByTagName() 方法可以返回带有指定标签名的对象的集合

注意:

  1. 因为得到的是一个对象的集合,所以我们想要操作里面的元素就需要遍历。
  2. 得到元素对象是动态的
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>getElementsByTagName获取某些元素</title>
</head>
<body><ul><li>hello world 1</li><li>hello world 2</li><li>hello world 3</li><li>hello world 4</li><li>hello world 5</li></ul><ol id="ols"><li>xxx</li></ol><script>// 返回的是 获取过来元素对象的集合 以伪数组的形式存储的var lis = document.getElementsByTagName('li');console.log(lis);console.log(lis[0]);// 想要依次打印里面的元素对象可以采取遍历的方式for (var i = 0; i < lis.length; i++) {console.log(lis[i]);}// 如果页面中只有一个li 返回的还是伪数组的形式var uls = document.getElementsByTagName('ul'); console.log(uls); // HTMLCollection [ul]// 如果页面中没有这个元素 返回的是空的伪数组的形式var as = document.getElementsByTagName('a');console.log(as); // HTMLCollection []// element.getElementsByTagName('标签名'); 父元素必须是指定的单个元素var ols = document.getElementsByTagName('ol'); // [ol]console.log(ols[0].getElementsByTagName('li'));// 相同的var ols = document.getElementById('ols');console.log(ols.getElementsByTagName('li'));</script>
</body>
</html>

在这里插入图片描述

2.3 通过 HTML5 新增的方法获取

  • getElementsByClassName() 根据类名获得某些元素集合
  • querySelector() 返回指定选择器的第一个元素对象
  • querySelectorAll() 返回指定选择器的所有元素对象集合
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>H5新增获取元素方式</title>
</head><body><div class="box">盒子1</div><div class="box">盒子2</div><div id="nav"><ul><li>首页</li><li>产品</li></ul></div><script>// getElementsByClassName() 根据类名获得某些元素集合var boxs = document.getElementsByClassName('box');console.log('boxs 根据类名获得某些元素集合');console.log(boxs);// querySelector() 返回指定选择器的第一个元素对象// 切记 里面的选择器需要加符号 .box  #navvar firstBox = document.querySelector('.box');console.log('firstBox 第一个元素对象');console.log(firstBox);var nav = document.querySelector('#nav');console.log('nav 第一个元素对象');console.log(nav);var li = document.querySelector('li');console.log('li 第一个元素对象');console.log(li);// querySelectorAll() 返回指定选择器的所有元素对象集合var allBox = document.querySelectorAll('.box');console.log('allBox 所有元素对象集合');console.log(allBox);var lis = document.querySelectorAll('li');console.log('lis 所有元素对象集合');console.log(lis);</script>
</body></html>

2.4 特殊元素获取

  • document.body; // 获取body 元素
  • document.documentElement; // 获取html 元素
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>获取特殊元素</title>
</head><body><script>// 获取body 元素var bodyEle = document.body;console.log(bodyEle);console.dir(bodyEle);// 获取html 元素// var htmlEle = document.html; // 错误写法var htmlEle = document.documentElement;console.log(htmlEle);</script>
</body></html>

在这里插入图片描述

3. 事件基础

3.1 事件概述

JavaScript 使我们有能力创建动态页面,而事件是可以被 JavaScript 侦测到的行为

简单理解: 触发— 响应机制

网页中的每个元素都可以产生某些可以触发 JavaScript 的事件,例如,可以在用户点击某按钮时产生一个事件,然后去执行某些操作

3.2 事件三要素

  1. 事件源 (谁)
  2. 事件类型 (什么事件)
  3. 事件处理程序 (做啥)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>事件的三要素</title>
</head>
<body><button id="btn">谭雅</button><button id="nbtn">你好</button><script>// 点击一个按钮,弹出对话框// 1. 事件是有三部分组成  事件源  事件类型  事件处理程序   我们也称为事件三要素//(1) 事件源 事件被触发的对象   谁  按钮var btn = document.getElementById('btn');//(2) 事件类型  如何触发 什么事件 比如鼠标点击(onclick) 还是鼠标经过 还是键盘按下//(3) 事件处理程序  通过一个函数赋值的方式 完成btn.onclick = function() {alert('点基地');}// 案例:页面中有一个按钮,当鼠标点击按钮的时候,弹出“你好”警示框var nbtn = document.getElementById('nbtn');nbtn.onclick = function () {alert('你好');}</script>
</body>
</html>

在这里插入图片描述

3.3 执行事件步骤

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>执行事件步骤</title>
</head>
<body><div>123</div><script>// 执行事件步骤// 点击div 控制台输出 我被选中了// 1. 获取事件源var div = document.querySelector('div');// 2.绑定事件 注册事件// div.onclick // 3.添加事件处理程序div.onclick = function() {console.log('被选中');}</script>
</body>
</html>

在这里插入图片描述

常见的鼠标事件

鼠标事件触发条件
onclick鼠标点击左键触发
onmouseover鼠标经过触发
onmouseout鼠标离开触发
onfocus获得鼠标焦点触发
onblur失去鼠标焦点触发
onmousemove鼠标移动触发
onmouseup鼠标弹起触发
onmousedown鼠标按下触发
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>常见的鼠标事件</title><style>div {width: 100px;height: 100px;}#div4 {width: 100px;height: 120px;}input {margin: 10px;}</style>
</head><body><div id="div1">div1</div><div id="div2">div2</div><div id="div3">div3</div><div id="div4">input1<input type="text" id="input1" value="请输入内容">input2<input type="text" id="input2" value="请输入内容"></div><!-- <button id="btn1">选我!</button><button id="btn2">选他!</button> --><div id="div5">div5</div><div id="div6">div6</div><div id="div7">div7</div><script>var div1 = document.getElementById('div1');div1.onclick = function () {console.log('div1 鼠标点击左键触发 被选中!');}var div2 = document.getElementById('div2');div2.onmouseover = function () {console.log('div2 鼠标经过触发 被选中!');}var div3 = document.getElementById('div3');div3.onmouseout = function () {console.log('div3 鼠标离开触发 被选中!');}var input1 = document.getElementById('input1');input1.onfocus = function () {input1.style.background = '#f0f';}var input2 = document.getElementById('input2');input2.onblur = function () {input2.style.background = '#f6f6f6';}var div5 = document.getElementById('div5');div5.onmousemove = function () {div5.style.background = 'yellow';console.log('div5 鼠标移动触发 被选中!');}var div6 = document.getElementById('div6');div6.onmouseup = function () {div6.style.background = 'blue';console.log('div6 鼠标弹起触发 被选中!');}var div7 = document.getElementById('div7');div7.onmousedown = function () {div7.style.background = '#eee';console.log('div7 鼠标按下触发 被选中!');}</script>
</body></html>

在这里插入图片描述
GitHub代码
gitee代码

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

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

相关文章

小红书达人种草怎么收费?

随着小红书平台的快速发展&#xff0c;用户数量在不断的上升&#xff0c;市场上也涌现出了很多的小红书营销公司&#xff0c;小红书营销主要是以小红书代写代发、品牌植入广告等方式来做品牌种草品宣。 小红书达人种草怎么收费这个问题&#xff0c;相信很多商家朋友都非常关心…

Flutter开发日常练习-pageview滑动视图动画

养小猫咪的伙伴来我的店铺逛逛吧!抖音商城搜索#早睡早起的猫咪小铺子 学着写一下滑动页面 pageview实现左右滑动视图 class SlidingContainer extends StatefulWidget {const SlidingContainer({super.key});overrideState<SlidingContainer> createState() > _Slidi…

2023零基础快速跟上人工智能第一梯队

写在前面&#xff1a;有关人工智能学什么&#xff0c;怎么学&#xff0c;什么路线等一系列问题。我决定整理一套可行的规划路线&#xff0c;希望帮助准备入门的朋友们少走些弯路。 下面我会推荐一个比较快速可行的学习模板&#xff0c;并附上我认为比较好的学习资料。 新手不建…

设计模式:创建者模式 - 适配器模式

文章目录 1.概述2.结构3.类适配器模式4.对象适配器模式5.应用场景6.JDK源码解析 - Reader 与 InputStream 1.概述 如果去欧洲国家去旅游的话&#xff0c;他们的插座如下图最左边&#xff0c;是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑&#xff0c;手机…

apache 配置与应用以及网页优化

Apache 配置与应用 --------构建虚拟 Web 主机-------- 虚拟Web主机指的是在同一台服务器中运行多个Web站点&#xff0c;其中每一个站点实际上并不独立占用整个服务器&#xff0c;因此被称为“虚拟”Web 主机。 通过虚拟 Web 主机服务可以充分利用服务器的硬件资源&#xff0c…

垃圾回收相关算法

标记阶段的算法 垃圾标记阶段&#xff1a;对象存货判断 在堆里存放着几乎所有的Java对象实例&#xff0c;在GC执行垃圾回收之前&#xff0c;首先需要区分出内存中哪些是存活对象&#xff0c;哪些是己经死亡的对象。只有被标记为己经死亡的对象&#xff0c;GC才会在执行垃圾回…

浏览器插件官方demo学习(五):键盘快捷键、数据缓存、网络请求监听

键盘快捷键 这个demo主要是介绍了&#xff0c;通过自定义键盘快捷键的方式来触发扩展。 必须要在manifest.json文件中添加commands属性组合键&#xff1a;使用组合键时必须包含 Ctrl 或 Alt 细节不介绍&#xff0c;可以自行查看官方文档。这里只看一下常用的东西。 定义组合…

【C++STL精讲】优先级队列(priority_queue)与双端队列(deque)

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f337;优先级队列——priority_queue&#x1f338;什么是优先级队列&#xff1f;&#x1f338;优先级队列的基本使用&#x1f338;什么是仿函数&#xff1f;&#x1f338;优先级队列的模拟实现 &#x1f337;双端队…

vue element-ui web端 引入高德地图,并获取经纬度

发版前接到一个临时新需求 &#xff0c;需要在web端地址选择时用地图&#xff0c;并获取经纬度。 临阵发版之际加需求&#xff0c;真的是很头疼&#xff0c;于是赶紧找度娘&#xff0c;找api。 我引入的是高德地图&#xff0c;首先要去申请key &#xff0c; 和密钥&#xff0c;…

20230420使用逻辑分析仪测量摄像头的PAG7920的时钟信号

20230420使用逻辑分析仪测量摄像头的PAG7920的时钟信号 2023/4/20 19:14 在CV1826平台&#xff1a; 1、vsync信号&#xff1a;刷新率120HZ PAG7920LT: Ultra-Low Power Global Shutter Image Sensor Max. Frame Rate 180 FPS 20KSa/20KHZ 2、href行同步信号&#xff1a;KHZ级别…

Vulnhub项目:JANGOW 1.0.1

靶机地址&#xff1a;Jangow: 1.0.1 ~ VulnHub 渗透过程&#xff1a; kali ip&#xff1a;192.168.56.104&#xff0c;使用arp-scan -l查看到靶机ip192.168.56.118 对靶机进行端口探测&#xff0c;发现了21、80端口 访问80端口&#xff0c;发现site目录 点击进去后&#xff0…

【Linux】使用systemd设置开机自启动命令

目录 1 使用使用systemd实现开机自动运行命令1.1 新建一个.service文件1.2 编写.service文件1.2.1 [Unit]1.2.2 [Service]1.2.3 [Install] 1.3 启动服务并设置自启动 2 编写Systemd服务文件的要点2.1 Systemd服务文件的位置2.2 Systemd服务文件的格式2.3 Systemd服务文件的基本…

Spring事务(3)-TransactionInterceptor实际事务执行

Spring事务&#xff08;2&#xff09;-EnableTransactionManagement实现源码解析 中介绍了Spring事务开启和代理的实现&#xff0c;现在了解实际事务执行TransactionInterceptor。 TransactionInterceptor TransactionInterceptor类图 MethodInterceptor&#xff1a;AOP代理后…

IDEA社区版搭建Tomcat服务器并创建web项目

IDEA社区版搭建Tomcat服务器并创建web项目 目标 创建Web项目的目录结构可以启动Tomcat服务器编写Servlet并访问成功 问题 IDEA社区版没有创建Web工程的选项IDEA社区版没有Tomcat插件 实现步骤 针对以上两个问题&#xff0c;分步解决 问题一&#xff1a;IDEA社区版没有创建…

深入认识VirtualPrivateNetwork

目录 一、认识什么是认证&#xff1f; 1.什么是数据认证&#xff0c;有什么作用&#xff0c;有哪些实现的技术手段? 2.什么是身份认证&#xff0c;有什么作用&#xff0c;有哪些实现的技术手段? 二、认识什么是VPN 1.什么VPN技术? 2.VPN技术有哪些分类? 3.IPSEC技术…

我的Qt作品(18)模仿Qt Creator IDE写了一个轻量级的视觉框架

Qt Creator的源码比较庞大。前几年我陆陆续续读过里面的源码。也写了几篇博文&#xff1a; https://blog.csdn.net/libaineu2004/article/details/104728857 https://blog.csdn.net/libaineu2004/article/details/89407333 最近一直想找机会&#xff0c;借用这个IDE的皮&…

mapreduce基础: 手写wordcount案例

文章目录 一、源代码二、运行截图 一、源代码 WordCountMapper类 package org.example.wordcount;import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper;impo…

DNS服务器配置与使用【CentOS】

从本质上说&#xff0c;DNS是一个分布数据库&#xff0c;是一个树形结构&#xff08;不是网状&#xff09;——层次结构 DNS查找过程就是 回溯的过程&#xff08;递归、迭代&#xff09; www.xxx.edu.cn&#xff08;属于四层结构&#xff09; 查询DNS&#xff1a;域名到IP地址的…

【Maven 入门】第二章、Maven核心程序解压与配置

一、Maven 官网地址 首页&#xff1a; Maven – Welcome to Apache Maven(opens new window) 下载页面&#xff1a; Maven – Download Apache Maven(opens new window) 本文以maven-3.3.8为例 具体下载地址&#xff1a;https://dlcdn.apache.org/maven/maven-3/3.8.8/bina…

Linux学习记录—— 이십일 进程间通信(3)信号量和消息队列

文章目录 1、消息队列2、信号量1、了解概念2、信号量理解 3、接口4、理解IPC 1、消息队列 两个进程ab之间系统维护一个队列结构&#xff0c;a进程往队列里放信息&#xff0c;信息编号为1&#xff0c;b进程往队列里放信息&#xff0c;信息编号为2&#xff1b;之后开始读取数据的…