【JavaEE初阶】JavaScript相应的WebAPI

目录

🌲WebAPI 背景知识

🚩什么是 WebAPI

🚩什么是 API

🎍DOM 基本概念

🚩什么是 DOM

🚩DOM 树

🍀获取元素

🚩querySelector

🚩querySelectorAll

🎄事件初识

🚩基本概念

🚩事件三要素

🌴操作元素

🚩获取/修改元素内容

🎈innerText

🎈innerHTML

🚩获取/修改元素属性

🚩获取/修改表单元素属性

🚩获取/修改样式属性

🎈行内样式操作

🎈类名样式操作

🌳操作节点

🚩新增结点

🎈创建元素节点

🎈插入节点到 dom 树中

🚩删除节点

🎋案例练习

🚩猜数字游戏


🌲WebAPI 背景知识

🚩什么是 WebAPI

前面学习的 JS 分成三个大的部分

  • ECMAScript: 基础语法部分
  • DOM API: 操作页面结构
  • BOM API: 操作浏览器

WebAPI 就包含了 DOM + BOM

前面学的 JS 基础语法主要学的是 ECMAScript, 这让我们建立基本的编程思维. 相当于练武需要先扎马步.

但是真正来写一个更加复杂的有交互式的页面, 还需要 WebAPI 的支持. 相当于各种招式

🚩什么是 API

API 是一个更广义的概念. 而 WebAPI 是一个更具体的概念, 特指 DOM+BOM

所谓的 API 本质上就是一些现成的函数/对象, 让程序猿拿来就用, 方便开发.

这里只是对其进行了一个简单介绍,如果有想要了解详细文档的小伙伴,可以参考以下文档:

Web API | MDN

🎍DOM 基本概念

🚩什么是 DOM

DOM 全称为 Document Object Model.

W3C 标准给我们提供了一系列的函数, 让我们可以操作:

  • 网页内容
  • 网页结构
  • 网页样式

🚩DOM 树

一个页面的结构是一个树形结构, 称为 DOM 树

比如我们有一个页面结构如下所示:

该DOM树型结构就形如:

重要概念:

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

这些文档等概念在 JS 代码中就对应一个个的对象.也就是说我们后面操作该文档里的元素是可以借鉴参考操作对象

🍀获取元素

我们需要对html中的元素进行操作,第一步就是获取里面的元素

这部分工作类似于 CSS 选择器的功能

这里博主只介绍最简单最好用的获取元素的方法。

需要注意的是:

  • 这个是 HTML5 新增的, IE9 及以上版本才能使用

🚩querySelector

语法如下:

使用须知:

  • selectors 包含一个或多个要匹配的选择器的 DOM字符串 DOMString 。 该字符串必须是有效的
  • CSS选择器字符串;如果不是,则引发 SYNTAX_ERR 异常
  • 表示文档中与指定的一组CSS选择器匹配的第一个元素的 html元素 Element 对象.
  • 如果您需要与指定选择器匹配的所有元素的列表,则应该使用querySelectorAll()
  • 可以在任何元素上调用,不仅仅是 document。 调用这个方法的元素将作为本次查找的根元素

使用注意事项:

  • 正因为参数是选择器, 所以一定要通过特殊符号指定是哪种选择器.
    • 例如 .box 是类选择器, #star 是 id 选择器 等

使用示例:

🚩querySelectorAll

使用 querySelectorAll 用法和上面类似

区别在于,querySelectorAll可以选中所有该标签或选择器的元素,querySelector只能选择最前面的一个

代码示例:

从该结果中也可以看出这两类的区别

🎄事件初识

🚩基本概念

JS 要构建动态页面, 就需要感知到用户的行为.

用户对于页面的一些操作(点击, 选择, 修改等) 操作都会在浏览器中产生一个个事件, 被 JS 获取到, 从而进行更复杂的交互操作.

浏览器就是一个哨兵, 在侦查敌情(用户行为). 一旦用户有反应(触发具体动作), 哨兵就会点燃烽火台的狼烟(事件),后方就可以根据狼烟来决定下一步的对敌策略.

🚩事件三要素

  1. 事件源: 哪个元素触发的
  2. 事件类型: 是点击, 选中, 还是修改?
  3. 事件处理程序: 进一步如何处理. 往往是一个回调函数.

这样可能比较抽象,我们举个例子来说明以下:

此时:

  • btn 按钮就是事件源.
  • 点击就是事件类型
  • function 这个匿名函数就是事件处理程序
  • 其中 btn.onclick = function() 这个操作称为 注册事件/绑定事件

当我们点击就会触发弹窗进行打印

注意:

  • 这个匿名函数相当于一个回调函数, 这个函数不需要程序猿主动来调用, 而是交给浏览器, 由浏览器自动在合适的时机(触发点击操作时) 进行调用

🌴操作元素

🚩获取/修改元素内容

🎈innerText

Element.innerText 属性表示一个节点及其后代的“渲染”文本内容

使用语法如下:

注意该操作:不识别 html 标签. 是非标准的(IE发起的). 读取结果不保留html源码中的 换行 和 空格

使用案例如下:

结果展示:

我们可以看到获取元素已发生改变

但是我们还可以看到, 通过 innerText 无法获取到 div 内部的 html 结构, 只能得到文本内容.

修改页面的时候也会把 span 标签当成文本进行设置.

🎈innerHTML

Element.innerHTML 属性设置或获取HTML语法表示的元素的后代

该操作识别 html 标签. W3C 标准的. 读取结果保留html源码中的 换行 和 空格

我们可以看到 innerHTML 不光能获取到页面的 html 结构, 同时也能修改结构. 并且获取到的内容保留的空格和换行

🚩获取/修改元素属性

可以通过 Element 对象的属性来直接修改, 就能影响到页面显示效果.

此时可以看到 img 这个 Element 对象中有很多属性

我们可以在代码中直接通过这些属性来获取属性的值

还可以直接修改属性

此时点击图片就可以切换图片显示状态. (前提是:需要提前把两个图片准备好)

🚩获取/修改表单元素属性

表单(主要是指 input 标签)的以下属性都可以通过 DOM 来修改

  • value: input 的值.
  • disabled: 禁用
  • checked: 复选框会使用
  • selected: 下拉框会使用
  • type: input 的类型(文本, 密码, 按钮, 文件等)

值得注意的是:

  • input 具有一个重要的属性 value, 这个 value 决定了表单元素的内容
  • 如果是输入框, value 表示输入框的内容, 修改这个值会影响到界面显式; 在界面上修改这个值也会影响到代码中的属性
  • 如果是按钮, value 表示按钮的内容. 可以通过这个来实现按钮中文本的替换

代码示例一:切换按钮控制密码框的隐藏与显示

通过更改按钮的属性与输入框的属性来达到隐藏和显示密码的效果

代码示例二: 点击计数

使用一个输入框输入初始值(整数). 每次点击按钮, 值 + 1

代码示例三: 全选/取消全选按钮

  1. 点击全选按钮, 则选中所有选项
  2. 只要某个选项取消, 则自动取消全选按钮的勾选状态

🚩获取/修改样式属性

CSS 中指定元素的属性, 都可以通过 JS 来修改

🎈行内样式操作

  • “行内样式”, 通过 style 直接在标签上指定的样式. 优先级很高.
  • 适用于改的样式少的情况

代码示例: 点击文字则放大字体.

注意:

  • style 中的属性都是使用 驼峰命名 的方式和 CSS 属性对应的.
  • 例如: font-size => fontSize, background-color => backgroundColor 等这种方式修改只影响到特定样式, 其他内联样式的值不变

🎈类名样式操作

  • 修改元素的 CSS 类名. 适用于要修改的样式很多的情况.
  • 由于 class 是 JS 的保留字, 所以名字叫做 className

代码示例: 开启夜间模式

  • 点击页面切换到夜间模式(背景变成黑色)
  • 再次点击恢复日间模式(背景变成白色)

通过点击改变类名来实现:

🌳操作节点

🚩新增结点

分成两个步骤

  1. 创建元素节点
  2. 把元素节点插入到 dom 树中.

第一步相当于生了个娃, 第二步相当于给娃上户口

🎈创建元素节点

使用 createElement 方法来创建一个元素. options 参数暂不关注

代码示例:

此时发现, 虽然创建出新的 div 了, 但是 div 并没有显示在页面上. 这是因为新创建的节点并没有加入到DOM 树中

面介绍的只是创建元素节点, 还可以使用:

  • createTextNode 创建文本节点
  • createComment 创建注释节点
  • createAttribute 创建属性节点

这里就不介绍了,感兴趣的小伙伴可以自行学习查看

🎈插入节点到 dom 树中

1. 使用 appendChild 将节点插入到指定节点的最后一个孩子之后

使用语法为:

代码示例:

2. 使用 insertBefore 将节点插入到指定节点之前

  • insertedNode 被插入节点(newNode)
  • parentNode 新插入节点的父节点
  • newNode 用于插入的节点
  • referenceNode newNode 将要插在这个节点之前

如果 referenceNode 为 null 则 newNode 将被插入到子节点的末尾.

注意:

  • referenceNode 引用节点不是可选参数

需要注意的是:

  • 如果针对一个节点插入两次, 则只有最后一次生效(相当于把元素移动了)
  • 一旦一个节点插入完毕, 再针对刚刚的节点对象进行修改, 能够同步影响到 DOM 树中的内容

🚩删除节点

使用 removeChild 删除子节点

  • child 为待删除节点
  • element 为 child 的父节点
  • 返回值为该被删除节点
  • 被删除节点只是从 dom 树被删除了, 但是仍然在内存中, 可以随时加入到 dom 树的其他位置.
  • 如果上例中的 child节点 不是 element 节点的子节点,则该方法会抛出异常.

案例如下:

🎋案例练习

🚩猜数字游戏

预期效果为:

代码实现:

结果展示:

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

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

相关文章

基于MNE的EEGNet 神经网络的脑电信号分类实战(附完整源码)

利用MNE中的EEG数据,进行EEGNet神经网络的脑电信号分类实现: 代码: 代码主要包括一下几个步骤: 1)从MNE中加载脑电信号,并进行相应的预处理操作,得到训练集、验证集以及测试集,每个…

SCHEMA find old payroll result

这几天原来HK客户要我帮忙看一个问题,在看HK雇佣条例时,发现又假期是取前12个月的工资,后来查看标准函数发现两个有用的operation,PLOOP与IMPRE 下图是2012年6月工资核算,现在循环着前面4个月。 输入 输出 2012年5月…

【ARM Trace32(劳特巴赫) 使用介绍 1 -- Trace32 debug 工具安装详细步骤】

文章目录 Trace32 工具解压查看安装手册准备安装设置安装目录指定安装目录选择安装类型:选择平台架构开始安装Trace32 应用打开使用界面Trace32 工具解压 使用 7-zip 解压两次: 查看安装手册 安装步骤按照文档中的 1、2、3 进行: 在解压文件中找到安装工具,如下: 准备…

Flux Tools 结构简析

Flux Tools 结构简析 BFL 这次一共发布了 Canny、Depth、Redux、Fill 四个 Tools 模型系列,分别对应我们熟悉的 ControlNets、Image Variation(IP Adapter)和 Inpainting 三种图片条件控制方法。虽然实现功能是相同的,但是其具体…

【物联网技术与应用】实验3:七彩LED灯闪烁

实验3 七彩LED灯闪烁 【实验介绍】 七彩LED灯上电后,7色动闪光LED模块可自动闪烁内置颜色。它可以用来制作相当吸引人的灯光效果。 【实验组件】 ● Arduino Uno主板* 1 ● USB数据线* 1 ● 7彩LED模块*1 ● 面包板*1 ● 9V方型电池*1 ● 跳线若干 【实验原…

Web 安全必读:跨站脚本攻击 (XSS) 原理与防御指南

文章目录 原理解析:触发方式 文件内容中的xss文件名中的xssHTTP请求中的xss其他 分类: 根据攻击脚本存储的方式根据脚本是否通过服务器处理根据持久性 常见的js触发标签 无过滤情况有过滤情况 xss-labs通关 level1-level10level11-level20 XSS&#x…

Set集合进行!contains判断IDEA提示Unnecessary ‘contains()‘ check

之前写过一个代码&#xff0c;用到了Set集合&#xff0c;判断了如果某个元素不存在就添加到集合中。今天翻看代码又看到了IDEAUnnecessary contains() check爆黄提示。 来一段测试代码&#xff1a; public class SetTest {public static void main(String[] args) {Set<Int…

Mapper代理开发

引入 Mybatis入门方式中&#xff0c;以下代码仍存在硬编码问题 Mapper 代理开发&#xff1a; 目的&#xff1a; 解决原生方式中的硬编码 简化后期执行sql ------下图中&#xff0c;第一段代码是原生硬编码代码块&#xff0c;第二个是引入了Mapper代理开发的代码块。 Mapper代…

abc 384 D(子数组->前缀和) +E(bfs 扩展的时候 按照数值去扩展)

D 做出来的很开心&#xff0c;好像本来就应该做出来>< 思路&#xff1a; 对于连续的子序列&#xff08;也就是 子数组&#xff09; 一般都和 前缀和 后缀和 有关系 区间[l r] 可以用 前缀 S_r -S{l-1} tar来表示。(对于两个元素等于一个数字&#xff0c;就可以枚举一个&…

【2024版】最新推荐好用的XSS漏洞扫描利用工具_xss扫描工具

工具介绍 toxssin 是一种开源渗透测试工具&#xff0c;可自动执行跨站脚本 (XSS) 漏洞利用过程。它由一个 https 服务器组成&#xff0c;它充当为该工具 (toxin.js) 提供动力的恶意 JavaScript 有效负载生成的流量的解释器。 安装与使用 1、安装需要的依赖库 git clone http…

web网页前后端交互方式

参考该文&#xff0c; 一、前端通过表单<form>向后端发送数据 前端是通过html中的<form>表单&#xff0c;设置method属性定义发送表单数据的方式是get还是post。 如使用get方式&#xff0c;则提交的数据会在url中显示&#xff1b;如使用post方式&#xff0c;提交…

Visual studio的AI插件-通义灵码

通义灵码 TONGYI Lingma 兼容 Visual Studio、Visual Studio Code、JetBrains IDEs 等主流 IDE&#xff1b;支持 Java、Python、Go、C/C、C#、JavaScript、TypeScript、PHP、Ruby、Rust、Scala 等主流编程语言。 安装 打开扩展管理器&#xff0c;搜送“TONGYI Lingma”&…

[C++]类的继承

一、什么是继承 1.定义&#xff1a; 在 C 中&#xff0c;继承是一种机制&#xff0c;允许一个类&#xff08;派生类&#xff09;继承另一个类&#xff08;基类&#xff09;的成员&#xff08;数据和函数&#xff09;。继承使得派生类能够直接访问基类的公有和保护成员&#xf…

【系统】Mac crontab 无法退出编辑模式问题

【系统】Mac crontab 无法退出编辑模式问题 背景一、问题回答1.定位原因&#xff1a;2.确认编辑器类型3.确保编辑器进入正确3.1 确认是否有crontab调度任务3.2 进入编辑器并确保编辑器正常3.3 保存操作 4.确认crontab任务存在 二、后续 背景 之前写过一篇&#xff1a;【系统】…

WPF系列一:窗口设置无边框

WindowStyle 设置&#xff1a;WindowStyle"None"&#xff0c;窗口无法拖拽&#xff0c;但可纵向和横向拉伸 <Window x:Class"WPFDemo.MainWindow.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x&quo…

售电公司办理全指南,开启能源新征程

一、售电公司的重要性 售电公司在能源市场中起着至关重要的作用&#xff0c;成为连接发电企业与终端用户的关键桥梁。随着经济的发展和生活水平的提高&#xff0c;电力需求持续增长&#xff0c;售电公司能够为满足这不断增长的需求提供更多选择。同时&#xff0c;在新电力技术…

JS使用random随机数实现简单的四则算数验证

1.效果图 2.代码实现 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</ti…

【记录】Django解决与VUE跨域问题

1 梗概 这里记录Django与VUE的跨域问题解决方法&#xff0c;主要修改内容是在 Django 中。当然其他的前端项目 Django 也可以这样处理。 2 安装辅助包 pip install django-cors-headers3 配置 settings.py INSTALLED_APPS [ # ... corsheaders, # ... ] 为了响应…

Sub-GHz无线通信技术,打造LPWAN的“最优解”

无线通信是指利用电磁波信号可以在自由空间中传播的特性进行信息交换的一种通信技术。近些年来&#xff0c;从便捷的手机通信到智能互联的家居系统&#xff0c;再到“万物互联”的物联网时代&#xff0c;无线通信技术都以其无处不在的身影&#xff0c;展现出了强大的生命力和无…

2D gaussian splatting的配置和可视化

继3D gaussian splatting&#xff0c;2D gaussian splatting除了渲染新视角&#xff0c;还能够生成mesh模型。 2D gaussian splatting的配置 两者的运行环境基本一致 GitHub - hbb1/2d-gaussian-splatting: [SIGGRAPH24] 2D Gaussian Splatting for Geometrically Accurate …