【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 …...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
