JavaScript基础入门04

news2025/1/11 9:55:54

目录

1.WebAPI 背景知识

1.1什么是 WebAPI

1.2什么是 API

2.DOM 基本概念

2.1什么是 DOM

2.2DOM 树

3.获取元素

3.1querySelector

3.2querySelectorAll

4.事件初识

4.1基本概念

4.2事件三要素

4.3简单示例

5.操作元素

5.1获取/修改元素内容

5.2获取/修改元素属性

5.3.获取/修改表单元素属性

5.4获取/修改样式属性

5.4.1行内样式操作

5.4.2类名样式操作


1.WebAPI 背景知识

1.1什么是 WebAPI

前面学习的 JS 分成三个大的部分
ECMAScript: 基础语法部分
DOM API: 操作页面结构
BOM API: 操作浏览器
WebAPI 就包含了 DOM + BOM.
这个是 W3C 组织规定的. (和制定 ECMAScript 标准的大佬们不是一伙人).
前面学的 JS 基础语法主要学的是 ECMAScript, 这让我们建立基本的编程思维. 相当于练武需要先
扎马步.
但是真正来写一个更加复杂的有交互式的页面, 还需要 WebAPI 的支持. 相当于各种招式.

1.2什么是 API

API 是一个更广义的概念. 而 WebAPI 是一个更具体的概念, 特指 DOM+BOM,所谓的 API 本质上就是一些现成的函数/对象, 让程序猿拿来就用, 方便开发.
相当于一个工具箱. 只不过程序猿用的工具箱数目繁多, 功能复杂.

2.DOM 基本概念

2.1什么是 DOM

DOM 全称为 Document Object Model.
W3C 标准给我们提供了一系列的函数, 让我们可以操作:
网页内容
网页结构
网页样式

2.2DOM 树

一个页面的结构是一个树形结构, 称为 DOM 树.
树形结构在数据结构阶段会介绍. 就可以简单理解成类似于 "家谱" 这种结构

页面结构形如:

DOM 树结构形如:

重要概念:
        文档: 一个页面就是一个 文档, 使用 document 表示.
        元素: 页面中所有的标签都称为 元素. 使用 element 表示.
        节点: 网页中所有的内容都可以称为 节点(标签节点, 注释节点, 文本节点, 属性节点等). 使用         node表示.
这些文档等概念在 JS 代码中就对应一个个的对象.
所以才叫 "文档对象模型" .

3.获取元素

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

3.1querySelector

这个是 HTML5 新增的, IE9 及以上版本才能使用.
前面的几种方式获取元素的时候都比较麻烦. 而使用 querySelector 能够完全复用前面学过的 CSS 选择器知识, 达到更快捷更精准的方式获取到元素对象.

var element = document.querySelector(selectors);

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

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

<div class="box">abc</div>
<div id="id">def</div>
<h3><span><input type="text"></span></h3>
<script>
  var elem1 = document.querySelector('.box');
  console.log(elem1);
  var elem2 = document.querySelector('#id');
  console.log(elem2);
  var elem3 = document.querySelector('h3 span input');
  console.log(elem3);
</script>

3.2querySelectorAll

使用 querySelectorAll 用法和上面类似.

<div class="box">abc</div>
<div id="id">def</div>
<script>
  var elems = document.querySelectorAll('div');
console.log(elems);
</script>

4.事件初识

4.1基本概念

JS 要构建动态页面, 就需要感知到用户的行为.
用户对于页面的一些操作(点击, 选择, 修改等) 操作都会在浏览器中产生一个个事件, 被 JS 获取到, 从而进行更复杂的交互操作.
浏览器就是一个哨兵, 在侦查敌情(用户行为). 一旦用户有反应(触发具体动作), 哨兵就会点燃烽火
台的狼烟(事件), 后方就可以根据狼烟来决定下一步的对敌策略.

4.2事件三要素

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

4.3简单示例

<button id="btn">点我一下</button>
<script>
  var btn = document.getElementById('btn');
  btn.onclick = function () {
    alert("hello world");
 }
</script>

btn 按钮就是事件源.
点击就是事件类型
function 这个匿名函数就是事件处理程序
其中 btn.onclick = function() 这个操作称为 注册事件/绑定事件
注意: 这个匿名函数相当于一个回调函数, 这个函数不需要程序猿主动来调用, 而是交给浏览器, 由浏览器自动在合适的时机(触发点击操作时) 进行调用

5.操作元素

5.1获取/修改元素内容

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

// 读操作
var renderedText = HTMLElement.innerText;
// 写操作
HTMLElement.innerText = string;

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

<div>
  <span>hello world</span>
  <span>hello world</span>
</div>
<script>
  var div = document.querySelector('div');
  // 读取 div 内部内容
  console.log(div.innerText);
  // 修改 div 内部内容, 界面上就会同步修改
  div.innerText = 'hello js <span>hello js</span>';
</script>

可以看到, 通过 innerText 无法获取到 div 内部的 html 结构, 只能得到文本内容.
修改页面的时候也会把 span 标签当成文本进行设置.

2. innerHTML

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

// 读操作
var content = element.innerHTML;
// 写操作
element.innerHTML = htmlString;

1. 先获取到事件源的元素
2. 注册事件
识别 html 标签. W3C 标准的. 读取结果保留html源码中的 换行 和 空格.

<div>
  <span>hello world</span>
  <span>hello world</span>
</div>
<script>
  var div = document.querySelector('div');
  // 读取页面内容
  console.log(div.innerHTML);
  // 修改页面内容
  div.innerHTML = '<span>hello js</span>'
</script>

可以看到 innerHTML 不光能获取到页面的 html 结构, 同时也能修改结构. 并且获取到的内容保留的空格和换行.
innerHTML 用的场景比 innerText 更多.

5.2获取/修改元素属性

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

<img src="rose.jpg" alt="这是一朵花" title="玫瑰花">
<script>
  var img = document.querySelector('img');
  console.dir(img);
</script>

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

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

<img src="rose.jpg" alt="这是一朵花" title="玫瑰花">
<script>
  var img = document.querySelector('img');
  // console.dir(img);
  console.log(img.src);
  console.log(img.title);
  console.log(img.alt);
</script>

还可以直接修改属性

<img src="rose.jpg" alt="这是一朵花" title="玫瑰花">
<script>
  var img = document.querySelector('img');
  img.onclick = function () {
    if (img.src.lastIndexOf('rose.jpg') !== -1) {
      img.src = './rose2.png';
   } else {
      img.src = './rose.jpg';
   }
 }
</script>

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

5.3.获取/修改表单元素属性

表单(主要是指 input 标签)的以下属性都可以通过 DOM 来修改
value: input 的值.
disabled: 禁用
checked: 复选框会使用
selected: 下拉框会使用
type: input 的类型(文本, 密码, 按钮, 文件等)

代码示例: 切换按钮的文本.
假设这是个播放按钮, 在 "播放" - "暂停" 之间切换.

<input type="button" value="播放">
<script>
  var btn = document.querySelector('input');
  btn.onclick = function () {
    if (btn.value === '播放') {
      btn.value = '暂停';
   } else {
      btn.value = '播放';
   }
 }
</script>

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

<input type="text" id="text" value="0">
<input type="button" id="btn" value='点我+1'>
<script>
  var text = document.querySelector('#text');
  var btn = document.querySelector('#btn');
  btn.onclick = function () {
    var num = +text.value;
    console.log(num);
    num++;
    text.value = num;
 }
</script>

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

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

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

<input type="checkbox" id="all">我全都要 <br>
<input type="checkbox" class="girl">貂蝉 <br>
<input type="checkbox" class="girl">小乔 <br>
<input type="checkbox" class="girl">安琪拉 <br>
<input type="checkbox" class="girl">妲己 <br>
<script>
  // 1. 获取到元素
  var all = document.querySelector('#all');
  var girls = document.querySelectorAll('.girl');
  // 2. 给 all 注册点击事件, 选中/取消所有选项
  all.onclick = function () {
    for (var i = 0; i < girls.length; i++) {
      girls[i].checked = all.checked;
   }
 }
  // 3. 给 girl 注册点击事件
  for (var i = 0; i < girls.length; i++) {
    girls[i].onclick = function () {
      // 检测当前是不是所有的 girl 都被选中了.
      all.checked = checkGirls(girls);
   }
 }
  // 4. 实现 checkGirls
  function checkGirls(girls) {
    for (var i = 0; i < girls.length; i++) {
      if (!girls[i].checked) {
        // 只要一个 girl 没被选中, 就认为结果是 false(找到了反例)
        return false;
     }
   }
    // 所有 girl 中都没找到反例, 结果就是全选中
    return true;
 }
</script>

5.4获取/修改样式属性

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

5.4.1行内样式操作

element.style.[属性名] = [属性值];
element.style.cssText = [属性名+属性值];

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

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

<div style="font-size: 20px; font-weight: 700;">
 哈哈
</div>
<script>
  var div = document.querySelector('div');
  div.onclick = function () {
    var curFontSize = parseInt(this.style.fontSize);
    curFontSize += 10;
    this.style.fontSize = curFontSize + "px";
 }
</script>

5.4.2类名样式操作

element.className = [CSS 类名];

修改元素的 CSS 类名. 适用于要修改的样式很多的情况.
由于 class 是 JS 的保留字, 所以名字叫做 className
代码示例: 开启夜间模式

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

<div class="container light">
 这是一大段话. <br>
 这是一大段话. <br>
 这是一大段话. <br>
 这是一大段话. <br>
</div>
* {
  margin: 0;
  padding: 0;
}
html,
body {
  width: 100%;
  height: 100%;
}
.container {
  width: 100%;
  height: 100%;
}
.light {
  background-color: #f3f3f3;
  color: #333;
}
.dark {
  background-color: #333;
  color: #f3f3f3;
}
var div = document.querySelector('div');
div.onclick = function () {
  console.log(div.className);
  if (div.className.indexOf('light') != -1) {
    div.className = 'container dark';
 } else {
    div.className = 'container light';
 }
}

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

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

相关文章

微服务版mall电商项目本地开发环境启动前后端服务详细指导教程

微服务版mall电商项目本地开发环境启动前后端服务详细指导教程 前言1 克隆mall-swarm 电商项目源码2 安装启动mall-swarm项目需要的第三方服务2.1 安装MySql8 并初始化数据2.2 安装Nacos2.3 安装Redis2.4 RabbitMQ安装2.5 ElasticSearch安装2.6 MongoDB安装2.7 Minio安装 3 启动…

多目标优化框架

随着模型越来越复杂&#xff0c;优化目标越来越多&#xff0c;传统算法都慢慢地无法胜任复杂优化任务&#xff0c;更为智能的优化方法也就应运而生了。其中有一类是进化优化算法&#xff0c;这类算法的思想来源是自然界的“优胜劣汰”法则&#xff0c;通过不停地保留好的个体最…

Linux学习-破解Root密码

破解root密码思路 1&#xff09;重启系统,进入 救援模式 开启虚拟机A&#xff0c;在此界面按e键 在linux开头的该行&#xff0c;将此行的ro修改为rw 然后空格输入 rd.break 按 ctrl x 启动&#xff0c;会看到switch_root:/# 2&#xff09;切换到硬盘操作系统环境 # chroot …

浅谈工厂电能管理系统改造与产品选型

叶根胜 安科瑞电气股份有限公司 上海嘉定202001 摘要&#xff1a;随着经济的快速发展&#xff0c;能源紧张和环境恶化引起了全世界的密切关注。电能在所有能源中消耗量大&#xff0c;但不可或缺&#xff0c;因此对电能的统一管理尤为重要。只有准确可靠的计量电能、分级管理和…

显卡服务器租用价格受哪些因素影响

显卡服务器也叫做GPU服务器&#xff0c;是一种有高性能显卡的服务器系统&#xff0c;显卡服务器能在大数据处理、科学计算等领域有很好的性能表现。今天小编就给大家讲一讲显卡服务器租用价格受哪些因素影响呢&#xff1f; 1.显卡类型和数量&#xff1a;一般说来中高端显卡的租…

【华为OD题库-007】代表团坐车-Java

题目 某组织举行会议&#xff0c;来了多个代表团同时到达&#xff0c;接待处只有一辆汽车&#xff0c;可以同时接待多个代表团&#xff0c;为了提高车辆利用率&#xff0c;请帮接待员计算可以坐满车的接待方案&#xff0c;输出方案数量。 约束: 1.一个团只能上一辆车&#xff0…

性格软弱怎么办?如何改变性格软弱?

软弱指的是身体衰弱无力气&#xff0c;而这里要说的是性格软弱&#xff0c;性格软弱的人&#xff0c;大多是不自信的&#xff0c;无主见&#xff0c;容易妥协&#xff0c;害怕产生矛盾&#xff0c;遇到问题就想逃避&#xff0c;自我否定&#xff0c;担心自己这也不行那也不行。…

剑指JUC原理-18.同步协作

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…

AD9371 Crossbar 和 I、Q数据 映射JESD204B传输层

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

vim相关命令讲解!

本文旨在讲解vim 以及其相关的操作&#xff01; 希望读完本文&#xff0c;读者会有一定的收获&#xff01;好的&#xff0c;干货马上就来&#xff01; 初识vim 在讲解vim之前&#xff0c;我们首先要了解vim是什么&#xff0c;有什么作用&#xff1f;只有了解了vim才能更好的理…

ModStartBlog v8.5.0 评论开关布局调整,系统后台全面优化

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场&#xff0c;后台一键快速安装 …

怎么用电脑开发安卓app?能外包吗?

随着智能手机的普及&#xff0c;安卓应用程序的开发需求也越来越高&#xff0c;许多人都想开发自己的安卓应用程序&#xff0c;但苦于缺乏相关知识和技能&#xff0c;本文将介绍如何使用电脑开发安卓应用程序&#xff0c;以及是否可以将开发工作外包给专业的开发团队。 一、了…

7天入门python系列之第三天Python的函数和模块

第3天主要是学习Python的函数和模块 编者打算开一个python 初学主题的系列文章&#xff0c;用于指导想要学习python的同学。关于文章有任何疑问都可以私信作者。对于初学者想在7天内入门Python&#xff0c;这是一个紧凑的学习计划。但并不是不可完成的。第三天开始python函数和…

python3GUI--PyQt5打包心得(二)nuitka、inno Setup(详细图文演示、附所有软件)

文章目录 一&#xff0e;前言二&#xff0e;准备1.nuitka1.1介绍1.3项目地址1.3安装 2.mingw641.1介绍1.2下载安装 3.Inno Setup1.1介绍1.2安装 三&#xff0e;nuitka打包1.打包2.装mingw643.装ccahe4.打包完成 四&#xff0e;测试效果五&#xff0e;inno Setup制作安装软件1.配…

呼叫中心系统如果对接大模型

电话机器人对接大模型的例子 介绍 自chatgpt3.5发布以来&#xff0c;各种大模型飞速发展&#xff0c;各行各业都有接入大模型的需求&#xff0c;呼叫中心行业非常适合通过接入大模型用AI来回答用户的各种咨询&#xff0c;降低人力资源&#xff0c;使用顶顶通呼叫中心中间件&a…

日志收集的方式和优点

日志是组织 IT 环境中发生的所有事情的记录。它们通常是一系列带有时间戳的消息&#xff0c;可为您提供有关网络中所有活动的第一手信息。 网络中的每个设备和应用程序都会生成日志数据以及用于监控网络流量的 NetFlow 数据&#xff0c;日志是安全信息和事件管理&#xff08;S…

宠物医院信息展示预约小程序的效果如何

养宠家庭越来越多&#xff0c;随之带来的就是宠物健康问题&#xff0c;生活条件稍微好点的家庭&#xff0c;只要宠物生病或洗护、寄养、美容等就会前往宠物医院&#xff0c;而近些年来&#xff0c;市场中的宠物医院也在连年增加&#xff0c;可以预见市场需求度较高。 而对宠物…

Linux shell编程学习笔记23:[] [[]]的用法小结

上回梳理 了Linux Shell编程中 () 、$()和 (())的用法&#xff0c;现在接着梳理 [] 和[[]]的用法。 1 单中括号&#xff08;方括号&#xff09;[] 1.1 检测某个条件是否成立 [和test等同&#xff0c;是 Shell 内置命令&#xff0c;用来检测某个条件是否成立。条件成立时退出状…

vue实战——登出【详解】

登出逻辑 弹窗询问用户是否确定登出清除登录状态 登录状态通常存储在 vuex 和 sessionStorage 中&#xff0c;更彻底的登出还可以把所有本地存储数据都清除掉&#xff0c;如 Cookie 和 localStorage 。跳转到登录页面 代码实现 <div class"loginBox" v-if"is…

操作系统:输入输出管理(一)系统概述与设备独立性软件

一战成硕 5.1 I/O系统概述5.1.1 I/O设备5.1.2 I/O控制方式5.1.3 I/O软件层次结构5.1.4 应用程序的I/O接口 5.2 设备独立性软件5.2.1 与设备无关的软件5.2.2 高速缓存与缓冲区5.2.3 设备分配与回收5.2.4 spooling技术&#xff08;假脱机技术&#xff09; 5.1 I/O系统概述 5.1.1…