【JavaEE】_JavaScript(Web API)
目录
1. DOM
1.1 DOM基本概念
1.2 DOM树
2. 选中页面元素
2.1 querySelector
2.2 querySelectorAll
3. 事件
3.1 基本概念
3.2 事件的三要素
3.3 示例
4.操作元素
4.1 获取/修改元素内容
4.2 获取/修改元素属性
4.3 获取/修改表单元素属性
4.3.1 value:获取到元素里用户填写的值;
4.3.2 type:输入框的形态(文本框、密码框...)
4.4 获取/修改样式属性
4.4.1 修改内联样式:修改style属性的值
4.4.2 修改元素应用的CSS类名
5.操作结点
5.1 新增结点
5.2 删除结点
WebAPI都是浏览器给JS提供的功能,如果浏览器不同,API的行为也可能存在差异;
1. DOM
1.1 DOM基本概念
DOM即Document Object Model 即文档(HTML)对象(JS对象)模型;
含义为:把HTML中的每个标签都可以映射到JS中的一个对应对象。
故而:标签上显示的内容可以通过JS对象感知到,同时JS对象修改对应属性,能够影响到标签的显示;
1.2 DOM树
DOM树结构形如:

注:(1)文档:一个页面就是一个文档,即document;
(2)元素:页面中所有的标签都成为元素,即element;
(3)结点:网页中所有的内容都可以称为结点(标签结点,注释结点,文本节点,属性结点等),即note;
接下来将介绍常用的DOMAPI;
2. 选中页面元素
2.1 querySelector
在CSS中,使用选择器选中元素进行操作,在JS中,使用querySelector(CSS选择器)选中页面元素,返回被选中的具体对象;
<div class="box">abc</div><div id="id"> def</div><h3><span><input type="text"></span></h3><script>let elem1=document.querySelector('.box');console.log(elem1);let elem2=document.querySelector('#id');console.log(elem2);let elem3=document.querySelector('h3>span>input');console.log(elem3);</script>
运行结果为:

注:(1)document是浏览器中的全局对象,任何一个页面都有一个document;
(2)所有的DOM API都是通过document对象展开的;
(3)除console.log之外,还可以使用cconsoe.dir打印对象,以elem1为例:

展开后可以查看dir对象的所有属性;
(4)CSS所有的选择器都可以在querySelector处使用;
2.2 querySelectorAll
<div class="box">abc</div><div id="id"> def</div><h3><span><input type="text"></span></h3><script>var arr=document.querySelectorAll('div');console.log(arr);</script>
运行结果为:

注:如果有多个类选择器重名,则querySelector默认选中第一个;
如果希望实现全部选中,则可使用querySelectorAll,二者使用方法完全相同,只是其返回的是一个数组;
3. 事件
3.1 基本概念
事件就是针对用户的操作进行的一些响应。
用户的行为会在浏览器中产生一些事件,要能够和用户交互,就需要代码针对事件做出反应;
3.2 事件的三要素
(1)事件源:哪个元素产生的事件;
(2)事件类型:是点击,选中还是修改等等;
(3)处理程序:事件发生后要执行哪个代码;
3.3 示例
<div class="box" onclick="alert('hello')">选择</div>
运行结果如下:

点击选择:

注:这是一个最简单的方式:直接在元素中使用onXXX方法来绑定一个事件处理程序;
但这种写法在实际开发中并不常用,更常用的方式如下:
<div class="box" >选择</div><div id="id">def</div><script>let div = document.querySelector('.box');div.onclick = function(){alert('hello');}</script>
其中,事件源为名为.box的div,事件类型为点击事件,事件处理程序为function函数;
4.操作元素
4.1 获取/修改元素内容
先获取到该元素,使用innerHTML属性,就能拿到元素里的内容,修改该属性就会影响界面显示:
(一)使用innerHTML:
<div class="box" >abc</div><div id="id">def</div><script>let div = document.querySelector('.box');div.onclick = function(){console.log(div.innerHTML);}</script>
运行结果为:

点击abc四次后查看console标签页:

注:(1)输出“选择”文本前的数字是chrome控制台将相邻的相同的日志合并的结果,如果需要展开,可以在设置(Setting)中取消以下选项:

(二)修改innerHTML:
<div class="box" >abc</div><div id="id">def</div><script>let div = document.querySelector('.box');div.onclick = function(){//console.log(div.innerHTML);div.innerHTML +='a';console.log(div.innerHTML);}</script>
运行结果为:

点击四次abc后查看console标签页:

对应的,页面显示也发生改变:

4.2 获取/修改元素属性
HTML的标签属性也会映射到JS对象中;
代码示例:点击图片从1.jpg更换显示为2.jpg:
<img src="1.jpg" width="200px" alt=""><script>let img = document.querySelector('img');img.onclick=function(){console.log(img.src);img.src='2.jpg';}</script>
运行页面如下:

点击图片后:

4.3 获取/修改表单元素属性
表单元素(input,textarea,select...)有一些特别的属性,普通标签没有,如:
4.3.1 value:获取到元素里用户填写的值;
代码示例1:打印在输入框中输入的内容
<input type="text"><button>点击</button><script>let input = document.querySelector('input');let button = document.querySelector('button');button.onclick = function(){console.log(input.value);}</script>
运行代码后,在网页页面输入框中输入hello world:

console标签页有:

注:不能将console.log(input.value)写为console.log(input.innerHTML),innerHTML获取到的是标签的内容,即双标签的开始和结束标签中编写的内容,input是单标签,没有内容;
代码示例2:点击按钮令输入框中的数字+1,并显示结果
<script>let input = document.querySelector('input');let button = document.querySelector('button');button.onclick=function(){let value = parseInt(input.value);value+=1;input.value = value;}</script>
运行后输入4点击两次+1按钮:

注:(1)value属性是一个String类型,直接+1是在进行字符串拼接:
button.onclick=function(){let value = input.value;value+=1;input.value = value;}
进行数值+1需要使用parseInt()函数将字符串类型转化为整数类型;
4.3.2 type:输入框的形态(文本框、密码框...)
代码示例:输入框文本与密码的更换
<input type="text"><button>隐藏密码</button><script>let input = document.querySelector('input');let button = document.querySelector('button');button.onclick = function(){if(input.type=='text'){input.type='password';button.innerHTML='显示密码';}else{input.type='text';button.innerHTML='隐藏密码';}}</script>
运行后,在输入框中输入123456:

点击隐藏密码后:

4.4 获取/修改样式属性
4.4.1 修改内联样式:修改style属性的值
代码示例1:实现div点击即可字体放大
<div style="font-size: 20px;">Hello JavaScript</div><script>let div = document.querySelector('div');div.onclick=function(){//先获取到当前字体的大小(转换为数值)let fontSize=parseInt(div.style.fontSize);fontSize +=10;// 设置字体大小时,切记px单位div.style.fontSize = fontSize+'px'; }</script>
运行后初始页面如下:

点击两次后:

注:(1)JS中所写的样式的属性名与CSS属性可能不同:
字体大小属性在CSS中写为font-size(脊柱命名法),在JS中写为fontSize(驼峰命名法),由于CSS中无需进行算术运算且CSS不区分大小写的,在JS等其他语言中,就需要进行转换;
属性名是相同的,只需将脊柱命名的属性名改为驼峰命名即可;
4.4.2 修改元素应用的CSS类名
代码示例1:切换夜间模式:
<div id='one' class="light" style="font-size:20px; height:500px">切换</div><style>.light{color: black;background-color: white;}.dark{color: white;background-color: black;}</style><script>let div = document.querySelector("#one");div.onclick = function(){if(div.className == 'dark'){div.className='light';}else{div.className='dark';}}</script>
运行后网页初始页面为:

点击切换后,页面如下:
以上操作都是针对当前页面上已有元素进行展开的,
也可以通过JS实现对页面元素的创建与删除;
5.操作结点
5.1 新增结点
新增节点分为两个步骤:
(1)创建一个元素;
(2)将这个元素结点插入到DOM树中;
代码示例1:实现在“请输入”文字后新增输入框,其默认值为hello:
<div class="one">请输入:</div><script>let input = document.createElement('input');input.value='hello';// 输入框中默认显示hello;let div = document.querySelector(".one");div.appendChild(input);</script>
运行后界面如下:

代码示例2:实现无序列表1 1 和2 2 后新增3 3至9 9:
<ul><li>1 1</li><li>2 2</li></ul><script>let ul = document.querySelector('ul');for(let n=3;n<10;n++){let li = document.createElement('li');li.innerHTML = n+' '+n;ul.appendChild(li);}</script>
运行后页面如下:

注:(1)使用appendChild将新增结点插入到指定结点的最后一个孩子之后;
(2)使用insertBefore将新增结点插入到指定结点之前;
5.2 删除结点
代码示例1:基于前例无序列表1 1至9 9,实现删除3 3元素并通过console标签页打印3 3:
let toDelete = document.querySelectorAll('li')[2];console.log(toDelete);ul.removeChild(toDelete);
运行后页面如下:

console标签页为:

注:使用parentElem.removeChild(childElem)删除指定元素的子元素;
相关文章:
【JavaEE】_JavaScript(Web API)
目录 1. DOM 1.1 DOM基本概念 1.2 DOM树 2. 选中页面元素 2.1 querySelector 2.2 querySelectorAll 3. 事件 3.1 基本概念 3.2 事件的三要素 3.3 示例 4.操作元素 4.1 获取/修改元素内容 4.2 获取/修改元素属性 4.3 获取/修改表单元素属性 4.3.1 value…...
ARM交叉编译搭建SSH
首先搭建好arm-linux交叉编译环境,开发板和主机可以ping通。 一、下载需要的源码 下载zlib: zlib-1.2.3.tar.gz 下载ssl: openssl-0.9.8d.tar.gz 下载ssh: openssh-4.6p1.tar.gz 二、交叉编译 新建目录/home/leo/ssh,并且将三个源码复制到该目录下。…...
###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。 目录 一. 延时函数的生成 1.通过延时计算器得到延时函数 2.可赋值改变…...
回归预测模型:MATLAB多项式回归
1. 多项式回归模型的基本原理 多项式回归是线性回归的一种扩展,用于分析自变量 X X X与因变量 Y Y Y之间的非线性关系。与简单的线性回归模型不同,多项式回归模型通过引入自变量的高次项来增加模型的复杂度,从而能够拟合数据中的非线性模式。…...
「计算机网络」数据链路层
数据链路层的地位:网络中的主机、路由器等都必须实现数据链路层信道类型 点对点信道:使用一对一的点对点通信方式广播信道 使用一对多的广播通信方式必须使用专用的共享信道协议来协调这些主机的数据发送 使用点对点信道的数据链路层 数据链路和帧 链…...
【Linux】Ubuntu 22.04 升级 nodejs 到 v18
Ubuntu 22.04 已经安装的nodejs 版本 nodejs is already the newest version (12.22.9~dfsg-1ubuntu3.3). 删除以前的 nodejs 版本: 1. sudo apt remove nodejs rooterp:~# sudo apt remove nodejs Reading package lists... Done Building dependency tree..…...
当go get获取不到软件包时
当使用go get命令获取软件包时,如果无法成功获取,您可以尝试以下方法来解决问题: 检查网络连接:首先,确保您的计算机能够访问互联网,并且没有任何网络防火墙或代理设置阻止了go get命令的正常运行。 设置代…...
全网最详细解法|同济大学|高等数学|第八版|习题1-5
文章目录 全网最详细解法|同济大学|高等数学|第八版|习题1-5|5.1全网最详细解法|同济大学|高等数学|第八版|习题1-5|5.2 全网最详细解法|同济大学…...
可视化工具:将多种数据格式转化为交互式图形展示的利器
引言 在数据驱动的时代,数据的分析和理解对于决策过程至关重要。然而,不同的数据格式和结构使得数据的解读变得复杂和困难。为了解决这个问题,一种强大的可视化工具应运而生。这个工具具有将多种数据格式(包括JSON、YAML、XML、C…...
[嵌入式AI从0开始到入土]14_orangepi_aipro小修补含yolov7多线程案例
[嵌入式AI从0开始到入土]嵌入式AI系列教程 注:等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间,后期会考虑出视频教程,务必催更,以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…...
机器学习、深度学习、强化学习、迁移学习的关联与区别
Hi,大家好,我是半亩花海。本文主要了解并初步探究机器学习、深度学习、强化学习、迁移学习的关系与区别,通过清晰直观的关系图展现出四种“学习”之间的关系。虽然这四种“学习”方法在理论和应用上存在着一定的区别,但它们之间也…...
苹果为什么需要台积电3nm工艺芯片?
据《经济日报》报道,苹果公司的产品线将迎来重大升级。下一代应用于iPad、MacBook和iPhone的M4和A18处理器预计将会增加内置AI计算核心的数量,从而大幅提高AI运算能力。这一变化将导致对台积电(TSMC)订单的显著增长。据悉…...
力扣:53. 最大子数组和
解题思路: 1.先把数组为空和数组的长度为1时的特殊情况分别开来。声明一个sum变量用于计算数组中的连续子数组的总和值 。在声明一个guo变量用于一种接收sum中的前i-1的总和。另一种接收sum中前i的总和,主要根据sum的值来判断是接收的哪一种。在声明一个…...
幻兽帕鲁Palworld专用服务器CPU内存配置怎么选择?
腾讯云幻兽帕鲁服务器配置怎么选?根据玩家数量选择CPU内存配置,4到8人选择4核16G、10到20人玩家选择8核32G、2到4人选择4核8G、32人选择16核64G配置,腾讯云百科txybk.com来详细说下腾讯云幻兽帕鲁专用服务器CPU内存带宽配置选择方法ÿ…...
学习总结11
KMP算法 全称Knuth-Morris-Pratt算法,是一种字符串匹配算法。该算法的目的是在一个文本串S内查找一个模式串P的出现位置。 KMP算法的核心思想是利用模式串自身的特性来避免不必要的字符比较。算法通过构建一个部分匹配表(也称为next数组)&a…...
Hadoop运行环境搭建
模板虚拟机环境准备 1)准备一台模板虚拟机hadoop100,虚拟机配置要求如下: 模板虚拟机:内存4G,硬盘50G,安装必要环境,为安装hadoop做准备 [roothadoop100 ~]# yum install -y epel-release [r…...
CTFshow web(php命令执行59-67)
web59 <?php /* # -*- coding: utf-8 -*- # Author: Lazzaro # Date: 2020-09-05 20:49:30 # Last Modified by: h1xa # Last Modified time: 2020-09-07 22:02:47 # email: h1xactfer.com # link: https://ctfer.com */ // 你们在炫技吗? if(isset($_POST…...
03、全文检索 -- Solr -- Solr 身份验证配置(给 Solr 启动身份验证、添加用户、删除用户)
目录 全文检索 -- Solr -- Solr 身份验证配置启用身份验证:添加用户:删除用户: 全文检索 – Solr – Solr 身份验证配置 学习之前需要先启动 Solr 执行如下命令即可启动Solr: solr start -p <端口>如果不指定端口…...
怎么使用ChatGPT提高工作效率?
怎么使用ChatGPT提高工作效率,这是一个有趣的话题。 相信不同的人有不同的观点,大家的知识背景和从事的工作都不完全相同,所以最终ChatGPT能起到的作用也不一样。 在编程过程中,如果我们要找一个库,我们最先做的肯定…...
【微服务】skywalking自定义告警规则使用详解
目录 一、前言 二、SkyWalking告警功能介绍 2.1 SkyWalking告警是什么 2.2 为什么需要SkyWalking告警功能 2.2.1 及时发现系统异常 2.2.2 保障和提升系统稳定性 2.2.3 避免数据丢失 2.2.4 提高故障处理效率 三、 SkyWalking告警规则 3.1 SkyWalking告警规则配置 3.2 …...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇
根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...
k8s从入门到放弃之Pod的容器探针检测
k8s从入门到放弃之Pod的容器探针检测 在Kubernetes(简称K8s)中,容器探测是指kubelet对容器执行定期诊断的过程,以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...
Pandas 可视化集成:数据科学家的高效绘图指南
为什么选择 Pandas 进行数据可视化? 在数据科学和分析领域,可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具,如 Matplotlib、Seaborn、Plotly 等,但 Pandas 内置的可视化功能因其与数据结…...
