6.4分享会

介绍

严格意义上讲,我们在 JavaScript 阶段学习的知识绝大部分属于 ECMAScript 的知识体系,ECMAScript 简称 ES 它提供了一套语言标准规范,如变量、数据类型、表达式、语句、函数等语法规则都是由 ECMAScript 规定的。浏览器将 ECMAScript 大部分的规范加以实现,并且在此基础上又扩展一些实用的功能,这些被扩展出来的内容我们称为 Web APIs。

Web APIs 的核心是 DOM 和 BOM。

DOM(Document Object Model)是将整个 HTML 文档的每一个标签元素视为一个对象,这个对象下包含了许多的属性和方法,通过操作这些属性或者调用这些方法实现对 HTML 的动态更新,为实现网页特效以及用户交互提供技术支撑。

简言之 DOM 是用来动态修改 HTML 的,其目的是开发网页特效及用户交互。

例子:

上述的例子中当用户分分别点击【开始】或【结束】按钮后,通过右侧调试窗口可以观察到 html 标签的内容在不断的发生改变,这便是通过 DOM 实现的。

概念

DOM 树
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>标题</title>
</head>
<body>文本<a href="">链接名</a><div id="" class="">文本</div>
</body>
</html>

如下图所示,将 HTML 文档以树状结构直观的表现出来,我们称之为文档树或 DOM 树,文档树直观的体现了标签与标签之间的关系。

最大的对象就是document

DOM 节点

节点是文档树的组成部分,每一个节点都是一个 DOM 对象主要分为元素节点、属性节点、文本节点等。

  1. 【元素节点】其实就是 HTML 标签,如上图中 headdivbody 等都属于元素节点。

  2. 【属性节点】是指 HTML 标签中的属性,如上图中 a 标签的 href 属性、div 标签的 class 属性。

  3. 【文本节点】是指 HTML 标签的文字内容,如 title 标签中的文字。

  4. 【根节点】特指 html 标签。

  5. 其它...

document

先对 document 有一个整体的认识。

document 是 JavaScript 内置的专门用于 DOM 的对象,该对象包含了若干的属性和方法,document 是学习 DOM 的核心。

<script>// document 是内置的对象// console.log(typeof document);// 1. 通过 document 获取根节点console.log(document.documentElement); // 对应 html 标签// 2. 通过 document 节取 body 节点console.log(document.body); // 对应 body 标签// 3. 通过 document.write 方法向网页输出内容document.write('Hello World!');
</script>

获取DOM对象

注意:因为body是唯一标签可以不用获取,对body标签样式修改可以直接写document.body.style

  1. querySelector 只会选取满足条件的第一个元素

    • 语法:

      document.querySelector('CSS选择器')
      //括号里是字符串,也就是必须加引号
      
    • 参数:包含一个或多个有效的CSS选择器 字符串

    • 返回值:CSS选择器匹配的第一个元素,一个HTMLElement对象,如果没有匹配到返回null

  2. querySelectorAll 满足条件的元素集合 返回伪数组

    • 语法:

      document.querySlector(`CSS选择器`)
      //括号里是字符串,也就是必须加引号
    • 参数:包含一个或多个有效的CSS选择器 字符串

    • 返回值:CSS选择器匹配的NodeList 对象集合,也就是得到的是数组,但是是伪数组(有长度有索引号,但是没有pop() push()等数组方法)

    • 想要得到里面的每一个对象,则需要遍历的方式获得

  3. 了解其他方式

    1. getElementById

      • //根据id获取一个元素
        document.getElementGyId('nav')
        //不用加#

    2. getElementsByTagName

      • //根据标签获取一类元素 获取页面所有div
        document.getElementsByTagName('div')
        //获取的伪数组
    3. getElementsByClassName

      • //根据类名获取元素
        document.getElementsByClassName('w') 
        //获取的伪数组
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>DOM - 查找节点</title>
</head>
<body><h3>查找元素类型节点</h3><p>从整个 DOM 树中查找 DOM 节点是学习 DOM 的第一个步骤。</p><ul><li>元素</li><li>元素</li><li>元素</li><li>元素</li></ul><script>const p = document.querySelector('p')  // 获取第一个p元素const lis = document.querySelectorAll('li')  // 获取第一个p元素</script>
</body>
</html>

总结:

  • document.getElementById 专门获取元素类型节点,根据标签的 id 属性查找

  • 任意 DOM 对象都包含 nodeType 属性,用来检检测节点类型

操作元素内容

通过修改 DOM 的文本内容,动态改变网页的内容。

  1. innerText 将文本内容添加/更新到任意标签位置文本中包含的标签不会被解析。

<script>// innerText 将文本内容添加/更新到任意标签位置const intro = document.querySelector('.intro')intro.innerText = '嗨~ 我叫李雷!'intro.innerText = '<h4>嗨~ 我叫李雷!</h4>'//不会解析<h4>
</script>
  1. innerHTML 将文本内容添加/更新到任意标签位置,文本中包含的标签会被解析。

<script>// innerHTML 将文本内容添加/更新到任意标签位置const intro = document.querySelector('.intro')intro.innerHTML = '嗨~ 我叫韩梅梅!'intro.innerHTML = '<h4>嗨~ 我叫韩梅梅!</h4>'
</script>

总结:如果文本内容中包含 html 标签时推荐使用 innerHTML,否则建议使用 innerText 属性。

##操作元素属性

有3种方式可以实现对属性的修改:

常用属性修改
  1. 直接能过属性名修改,最简洁的语法

<script>// 1. 获取 img 对应的 DOM 元素const pic = document.querySelector('.pic')// 2. 修改属性pic.src = './images/lion.webp'pic.width = 400;pic.alt = '图片不见了...'
</script>
控制样式属性
style
  1. 应用【修改样式】,通过修改行内样式 style 属性,实现对样式的动态修改。

通过元素节点获得的 style 属性本身的数据类型也是对象,如 box.style.colorbox.style.width 分别用来获取元素节点 CSS 样式的 colorwidth 的值。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>练习 - 修改样式</title>
</head>
<body><div class="box">随便一些文本内容</div><script>// 获取 DOM 节点const box = document.querySelector('.intro')box.style.color = 'red'box.style.width = '300px'// css 属性的 - 连接符与 JavaScript 的 减运算符// 冲突,所以要改成小驼峰法box.style.backgroundColor = 'pink'box.style.borderTop = '2px solid red'</script>
</body>
</html>

任何标签都有 style 属性,通过 style 属性可以动态更改网页标签的样式,如要遇到 css 属性中包含字符 - 时,要将 - 去掉并将其后面的字母改成大写,如 background-color 要写成 box.style.backgroundColor

className
  1. 操作类名(className) 操作CSS

如果修改的样式比较多,直接通过style属性修改比较繁琐,我们可以通过借助于css类名的形式。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>练习 - 修改样式</title><style>.pink {background: pink;color: hotpink;}</style>
</head>
<body><div class="intro">随便一些文本内容</div><script>// 获取 DOM 节点const box = document.querySelector('.intro')box.className = 'pink'</script>
</body>
</html>

注意:

1.由于class是关键字, 所以使用className去代替

2.className是使用新值换旧值, 如果不保留的话新的类名会覆盖掉旧的类名,如果需要添加一个类,需要保留之前的类名

保留方式:

<body><div class = 'nav'>123</div><script>const div = document.querySelector('div')div.className = 'nav box'</script>
</body>
classList
  1. 通过 classList 操作类控制CSS

为了解决className 容易覆盖以前的类名,我们可以通过classList方式追加和删除类名

<head><style>div {width: 200px;height: 200px;background-color: pink;}.active {width: 300px;height: 300px;background-color: hotpink;margin-left: 100px;}</style>
</head><body><div class="one"></div><script>// 1.获取元素let box = document.querySelector('css选择器')let box = document.querySelector('div')// add是个方法 添加  追加box.classList.add('active')// remove() 移除 类box.classList.remove('one')// 切换类togglre(),有就删掉,没有就加上box.classList.toggle('one')</script>
</body></html>
  • 追加add() 类名不加点,并且是字符串

操作表单元素属性

表单很多情况,也需要修改属性,比如点击眼睛,可以看到密码,本质是把表单类型转换为文本框

正常的有属性有取值的跟其他的标签属性没有任何区别

获取:DOM对象.属性名

设置:DOM对象.属性名= 新值

注:不能用innerHTML去得到表单的内容,innerHTML只能得到普通的元素的内容,除了表单

标准属性: 标签天生自带的属性 比如class id title等, 可以直接使用点语法操作比如: disabled、checked、selected(一律使用布尔值表示)

<body><input type="text" value="请输入"><button disabled>按钮</button><input type="checkbox" name="" id="" class="agree"><script>// 1. 获取元素let input = document.querySelector('input')// 2. 取值或者设置值  得到input里面的值可以用 value,不能用innerHTMLconsole.log(input.value)input.value = '小米手机'input.type = 'password'// 2. 启用按钮let btn = document.querySelector('button')// disabled 不可用   =  false  这样可以让按钮启用btn.disabled = false// 3. 勾选复选框let checkbox = document.querySelector('.agree')checkbox.checked = truecheckbox.checked = 'true'//会选中,但只是因为字符串除了空字符串,都是true,这里发生了隐式转换,会选中但不提倡//比如说checkbox.checked = 'false'//也会选中</script>
</body></html>

注意:表单中button是特殊的,所以获取botton的内容使用innerHTML

自定义属性

自定义属性:

<!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>Document</title></head><body><div data-id="1"> 自定义属性 </div><script>// 1. 获取元素let div = document.querySelector('div')// 2. 获取自定义属性值console.log(div.dataset.id)</script>
</body></html>

间歇函数setInterval

setInterval 是 JavaScript 中内置的函数,它的作用是间隔固定的时间自动重复执行另一个函数,也叫定时器函数。

setInterval(函数名/匿名函数,间隔时间)
//不加小括号,加括号是调用的意思
//毫秒

<script>// 1. 定义一个普通函数function repeat() {console.log('不知疲倦的执行下去....')}// 2. 使用 setInterval 调用 repeat 函数// 间隔 1000 毫秒==1s,重复调用 repeatsetInterval(repeat, 1000)
</script>

注意:

  1. 函数名字不需要加括号

  2. 定时器返回的是一个id数字

关闭定时器clearInterval

let 变量名 = setInterval(函数,间隔时间)
clearInterval(变量名)

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

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

相关文章

Wi-Fi 6E vs. Wi-Fi 7: Which is the Best Fit for Your Infrastructure?

Wi-Fi 6E vs. Wi-Fi 7: Which is the Best Fit for Your Infrastructure? With the rapid advancement of wireless technology, organizations face a critical decision: should they adopt Wi-Fi 6E now or wait for Wi-Fi 7? This decision impacts various aspects of …

短剧市场大爆炸:小米和华为的亿万争夺战,谁能笑到最后?

在数字化媒体的浪潮中&#xff0c;内容消费模式正经历着翻天覆地的变化。短视频的兴起引领了一种全新的娱乐方式&#xff0c;而短剧作为其衍生形式&#xff0c;正逐渐成为各大科技巨头争夺的新战场。 小米和华为&#xff0c;作为中国科技界的两大巨头&#xff0c;也在这一新兴…

揭秘AI 原生应用技术栈

一次性把“AI 原生应用技术栈”说明白 AI热潮持续&#xff0c;厂商努力推动有价值的应用涌现&#xff0c;并打造服务AI原始应用的平台产品。本文精简介绍业界最新的AI原生应用技术栈&#xff0c;让您迅速把握前沿科技脉搏。 整体架构 AI技术栈逻辑图精简呈现&#xff0c;多层…

图形学初识--透视修正

文章目录 前言正文为什么需要透视矫正&#xff1f;1、视图坐标空间--->NDC坐标空间&#xff08;透视投影&#xff09;&#xff08;1&#xff09;直线&#xff1a;&#xff08;2&#xff09;三角形&#xff1a;总结&#xff1a; 2、NDC坐标空间--->屏幕坐标空间&#xff0…

PID控制算法介绍及使用举例

PID 控制算法是一种常用的反馈控制算法&#xff0c;用于控制系统的稳定性和精度。PID 分别代表比例&#xff08;Proportional&#xff09;、积分&#xff08;Integral&#xff09;和微分&#xff08;Derivative&#xff09;&#xff0c;通过组合这三个部分来调节控制输出&#…

因子区间[牛客周赛44]

思路分析: 我们可以发现125是因子个数的极限了,所以我们可以用二维数组来维护第几个数有几个因子,然后用前缀和算出来每个区间合法个数,通过一个排列和从num里面选2个 ,c num 2 来计算即可 #include<iostream> #include<cstring> #include<string> #include…

【Linux系统】进程信号

本篇博客整理了进程信号从产生到处理的过程细节&#xff0c;通过不同过程中的系统调用和其背后的原理&#xff0c;旨在让读者更深入地理解操作系统的设计与软硬件管理手段。 目录 一、信号是什么 1.以生活为鉴 2.默认动作与自定义动作 3.信号的分类、保存、产生 二、产生…

ChatGPT-4o抢先体验

速度很快&#xff0c;结果很智能&#xff0c;支持多模态输入输出&#xff0c;感兴趣联系作者

WordPress电脑版+手机版自动识别切换主题插件优化版

下载地址&#xff1a;WordPress电脑版手机版自动识别切换主题插件优化版 插件介绍&#xff1a; 电脑访问自动显示电脑版 手机访问自动显示手机版

电子电器架构 --- 智能座舱技术分类

电子电器架构 — 智能座舱技术分类 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,…

Java基础29(编码算法 哈希算法 MD5 SHA—1 HMac 算法 堆成加密算法)

目录 一、编码算法 1. 常见编码 2. URL编码 3. Base64编码 4. 小结 二、哈希算法 1. 哈希碰撞 2. 常用哈希算法 MD5算法 SHA-1算法 自定义HashTools工具类 3. 哈希算法的用途 校验下载文件 存储用户密码 4. 小结 三、Hmac算法 小结&#xff1a; 四、对称加密…

鸿蒙轻内核M核源码分析系列七 动态内存Dynamic Memory

内存管理模块管理系统的内存资源&#xff0c;它是操作系统的核心模块之一&#xff0c;主要包括内存的初始化、分配以及释放。 在系统运行过程中&#xff0c;内存管理模块通过对内存的申请/释放来管理用户和OS对内存的使用&#xff0c;使内存的利用率和使用效率达到最优&#x…

【C++小知识】为什么C语言不支持函数重载,而C++支持

为什么C语言不支持函数重载&#xff0c;而C支持 编译链接过程函数名修饰过程总结 在了解C函数重载前&#xff0c;如果对文件的编译与链接不太了解。可以看看我之前的一篇文章&#xff0c;链接: 文件的编译链接 想要清楚为什么C语言不支持函数重载而C支持&#xff0c;有俩个过程…

大模型Prompt-Tuning技术进阶

LLM的Prompt-Tuning主流方法 面向超大规模模型的Prompt-Tuning 近两年来&#xff0c;随之Prompt-Tuning技术的发展&#xff0c;有诸多工作发现&#xff0c;对于超过10亿参数量的模型来说&#xff0c;Prompt-Tuning所带来的增益远远高于标准的Fine-tuning&#xff0c;小样本甚至…

【保姆级讲解Outlook邮箱的使用技巧】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Java基础27,28(多线程,ThreadMethod ,线程安全问题,线程状态,线程池)

目录 一、多线程 1. 概述 2. 进程与线程 2.1 程序 2.2 进程 2.3 线程 2.4 进程与线程的区别 3. 线程基本概念 4.并发与并行 5. 线程的创建方式 方式一&#xff1a;继承Thread类 方式二&#xff1a;实现Runable接口 方式三&#xff1a;实现Callable接口 方式四&…

安徽某高校数据挖掘作业6

1 根据附件中year文件&#xff0c;编辑Python程序绘制年销售总额分布条形图和年净利润分布条形图&#xff0c;附Python程序和图像。 2 根据附件中quarter和quarter_b文件&#xff0c;编辑Python程序绘制2018—2020年销售额和净利润折线图&#xff0c;附Python程序和图像。 3 …

2025QS世界大学排行榜最新完整版

北京时间6月5日凌晨4点&#xff0c;QS官网发布了备受瞩目的2025年世界大学排名&#xff0c;本次排名共涵盖了1500所顶尖院校&#xff0c;让人们期待已久的排名榜单一览无遗&#xff0c;展现了全球高等教育的新格局。根据上大学网&#xff08;www.sdaxue.com&#xff09;统计&am…

HarmonyOS(二十三)——HTTP请求实战一个新闻列表

在前一篇文章&#xff0c;我们已经知道如何实现一个http请求的完整流程&#xff0c;今天就用官方列子实战一个简单的新闻列表。进一步掌握ArkTS的声明式开发范式&#xff0c;数据请求&#xff0c;常用系统组件以及touch事件的使用。 主要包含以下功能&#xff1a; 数据请求。…

1103. 分糖果 II Rust等差求和+一元二次方程求根(击败100% Rust用户)

题目内容 排排坐&#xff0c;分糖果。 我们买了一些糖果 candies&#xff0c;打算把它们分给排好队的 n num_people 个小朋友。 给第一个小朋友 1 颗糖果&#xff0c;第二个小朋友 2 颗&#xff0c;依此类推&#xff0c;直到给最后一个小朋友 n 颗糖果。 然后&#xff0c;…