Web APIs第一天

第一天:DOM获取元素,获取元素,修改属性

声明新变量,一般默认const,如果变量的值不变,则使用const。如果变量的值变化,则使用let。var已经被淘汰了。

    <script>const arr = ['red', 'pink']arr.push('blue')console.log(arr);</script>

不会报错,因为数组地址没有变化

arr=[1,2,3]会报错,因为把新地址给原数组了,对象同理

以后建议数组和对象使用const声明。

API作用和分类:使用JS去操作html和浏览器

分类:BOM和DOM

DOM:Document Object Model 文档对象模型

DOM树:

在html中,div是标签,在js中div是对象

    <div>123</div><script>const div = document.querySelector('div')console.dir(div)</script>

获取DOM元素

1.根据CSS选择器获取

document.querySelector('CSS选择器')
<body><div class="box">123</div><div class="box">abc</div><script>const box = document.querySelector('div')const box = document.querySelector('.box')console.log(box)console.dir(box)</script></body>

如果好几个标签一样或几个标签属于一个类,则使用querySelector时调用第一个,

innerHTML为123

<body><p id="nav">导航栏</p><script>const p = document.querySelector('#nav')console.log(nav);</script></body>

获取p可以使用它的id,前面要加“#”号。

<body><ul><li>测试1</li><li>测试2</li><li>测试3</li></ul><script>const li = document.querySelector('ul li:first-child')console.log(li);</script>
</body>

获取第一个li:'ul li:first-child'

获取所有的ul里面的li

const li = document.querySelectorAll('ul li')

使用querySelectorAll

获取一个DOM元素修改时可以使用:

nav.style.color = 'red'

通过querySelectAll获取的数组NodeList是伪数组,不能使用pop和push

其他获取DOM元素的方法

document.getElementById('nav')
//根据ID获取一个元素
document.getElementsByTagName('div')
//根据标签获取一类元素,获取页面所有div
document.getElementsByClassName('w')
//根据类名获取元素,获取页面所有类名为w的元素

修改文字内容

<body><div class="box">我是文字内容</div><script>const box = document.querySelector('.box')console.log(box.innerText);box.innerText = '666'</script>
</body>

innerHTML会解析标签,这是innerText没有的

 box.innerHTML = '<strong>666</strong>'

公司年会抽奖小案例:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><div class="wrapper"><strong>年会抽奖</strong><h1>一等奖:<span id="one">???</span></h1><h3>二等奖:<span id="two">???</span></h3><h5>三等奖:<span id="three">???</span></h5></div><script>//声明数组const personArr = ['周杰伦', '楼得发', '张学友', '渣渣辉', '周星驰']//一等奖//随机数,数组的下标const random = Math.floor(Math.random() * personArr.length)//获取one元素const one = document.querySelector('#one')one.innerHTML = personArr[random]personArr.splice(random, 1)//从random这个元素开始删除,删1个(把刚刚中奖的删掉)//二等奖//随机数,数组的下标const random2 = Math.floor(Math.random() * personArr.length)//获取one元素const two = document.querySelector('#two')two.innerHTML = personArr[random2]personArr.splice(random2, 1)//三等奖//随机数,数组的下标const random3 = Math.floor(Math.random() * personArr.length)//获取one元素const three = document.querySelector('#three')three.innerHTML = personArr[random3]</script>
</body></html>

例题2:更改图片:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><img src="./1.webp" alt="" srcset=""><script>function getRandom(N, M) {return Math.floor(Math.random() * (M - N + 1)) + N}const img = document.querySelector('img')const random = getRandom(1, 6)img.src = `./${random}.webp`</script>
</body></html>

刷新一次浏览器随机个更换一次图片

修改样式

1.使用style更换样式

    <style>.box {width: 100px;height: 100px;background-color: pink;}</style>

<body><div class="box"></div><script>const box = document.querySelector('.box')box.style.width = '300px'box.style.backgroundColor = 'yellow'box.style.border = '2px solid blue'box.style.borderTop = '2px solid red'</script>
</body>

2.使用className修改样式

如果修改的样式较多,使用style不方便,可以通过使用css类名的形式

 <style>div {width: 100px;height: 100px;background-color: pink;margin: 100px;}.box {width: 300px;height: 300px;background-color: skyblue;margin: 100px auto;padding: 10px;border: 1px solid #000;}</style>

div是原样式,box是修改后的样式

 <script>//获取元素const div = document.querySelector('div')div.className = 'box'</script>

使用上述方法给div的类赋新值

3.通过classList修改样式


<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.box {width: 100px;height: 100px;background-color: pink;margin: 100px;}.active {color: red;}</style>
</head><body><div class="box">fff</div><script>const box = document.querySelector('.box')box.classList.add('active')</script>
</body>

添加之后就有两个类了

还有:

box.classList.remove('box')
box.classList.toggle('active')

remove是移除

toggle是切换,有这个类就删去,没有就加上

轮播图

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {box-sizing: border-box;}.slider {width: 560px;height: 400px;overflow: hidden;}.slider-wrapper {width: 100%;height: 320px;}.slider-wrapper img {width: 100%;height: 100%;display: block;}.slider-footer {height: 80px;background-color: rgb(100, 67, 68);padding: 12px 12px 0 12px;position: relative;}.slider-footer .toggle {position: absolute;right: 0;top: 12px;display: flex;}.slider-footer .toggle button {margin-right: 12px;width: 28px;height: 28px;appearance: none;border: none;background: rgba(255, 255, 255, 0.1);color: #fff;border-radius: 4px;cursor: pointer;}.slider-footer .toggle button:hover {background: rgba(255, 255, 255, 0.2);}.slider-footer p {margin: 0;color: #fff;font-size: 18px;margin-bottom: 10px;}.slider-indicator {margin: 0;padding: 0;list-style: none;display: flex;align-items: center;}.slider-indicator li {width: 8px;height: 8px;margin: 4px;border-radius: 50%;background: #fff;opacity: 0.4;cursor: pointer;}.slider-indicator li.active {width: 12px;height: 12px;opacity: 1;}</style>
</head><body><div class="slider"><div class="slider-wrapper"><img src="./images/slider01.jpg" alt="" /></div><div class="slider-footer"><p>对人类来说会不会太超前了?</p><ul class="slider-indicator"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><div class="toggle"><button class="prev">&lt;</button><button class="next">&gt;</button></div></div></div><script>// 1. 初始数据const sliderData = [{ url: './images/slider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgb(100, 67, 68)' },{ url: './images/slider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgb(43, 35, 26)' },{ url: './images/slider03.jpg', title: '真正的jo厨出现了!', color: 'rgb(36, 31, 33)' },{ url: './images/slider04.jpg', title: '李玉刚:让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },{ url: './images/slider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },{ url: './images/slider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },{ url: './images/slider07.jpg', title: '一站式解决你的电脑配置问题!!!', color: 'rgb(53, 29, 25)' },{ url: './images/slider08.jpg', title: '谁不想和小猫咪贴贴呢!', color: 'rgb(99, 72, 114)' },]//先产生随机数const random = parseInt(Math.random() * sliderData.length)//获取图片const img = document.querySelector('.slider-wrapper img')//修改图片路径img.src = sliderData[random].url//获取文字const p = document.querySelector('.slider-footer p')//修改文字p.innerHTML = sliderData[random].title//获取colorconst footer = document.querySelector('.slider-footer')//修改colorfooter.style.backgroundColor = sliderData[random].color//小圆点const li = document.querySelector(`.slider-indicator li:nth-child(${random + 1})`)li.classList.add('active')</script>
</body></html>

操作元素属性 

<body><input type="text" value="电脑"><script>const uname = document.querySelector('input')console.log(uname.value);//获取表单的值// uname.innerHTML无法获取uname.value = '666'//设置表单的值uname.type = 'password'//变成黑点</script>
</body>

勾选

    <input type="checkbox" name="" id=""><script>const ipt = document.querySelector('input')console.log(ipt.checked);ipt.checked = trueconsole.log(ipt.checked);</script>

自定义属性

<body><div data-id="1" data-s="df ">1</div><div data-id="2">2</div><div data-id="3">3</div><div data-id="4">4</div><div data-id="5">5</div><div data-id="6">6</div><script>const one = document.querySelector('div')console.log(one.dataset);</script>
</body>

定时器-间歇函数

使定时器函数重复执行代码

开启定时器:

    <script>//开启定时器// setInterval(函数,时间)setInterval(function () { document.write(666) }, 1000)</script>

1000ms=1秒

正常的函数名,不要加小括号

定时器返回值为定时器的id

        let n = setInterval(function () { document.write(666) }, 1000)console.log(n);let m = setInterval(function () { document.write(666) }, 1000)console.log(m);

关闭定时器:clearInterval(1)

括号里面填定时器的id

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><textarea name="" id="" cols="30" rows="10">用户注册协议欢迎注册成为京东用户!在您注册过程中,您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议,请您务必仔细阅读、充分理解协议中的条款内容后再点击同意(尤其是以粗体或下划线标识的条款,因为这些条款可能会明确您应履行的义务或对您的权利有所限制)。【请您注意】如果您不同意以下协议全部或任何条款约定,请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息,阅读并点击同意上述协议且完成全部注册流程后,即表示您已充分阅读、理解并接受协议的全部内容,并表明您同意我们可以依据协议内容来处理您的个人信息,并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方(详情查看</textarea><br><button class="btn" disabled>我已经阅读用户协议(5)</button><script>const btn = document.querySelector('.btn')let i = 5//倒计时let n = setInterval(function () {i--btn.innerHTML = `我已经阅读用户协议(${i})`if (i === 0) {clearInterval(n)//打开按钮btn.disabled = falsebtn.innerHTML = '同意'}}, 1000)</script>
</body></html>

综合案例:

定时轮播图

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {box-sizing: border-box;}.slider {width: 560px;height: 400px;overflow: hidden;}.slider-wrapper {width: 100%;height: 320px;}.slider-wrapper img {width: 100%;height: 100%;display: block;}.slider-footer {height: 80px;background-color: rgb(100, 67, 68);padding: 12px 12px 0 12px;position: relative;}.slider-footer .toggle {position: absolute;right: 0;top: 12px;display: flex;}.slider-footer .toggle button {margin-right: 12px;width: 28px;height: 28px;appearance: none;border: none;background: rgba(255, 255, 255, 0.1);color: #fff;border-radius: 4px;cursor: pointer;}.slider-footer .toggle button:hover {background: rgba(255, 255, 255, 0.2);}.slider-footer p {margin: 0;color: #fff;font-size: 18px;margin-bottom: 10px;}.slider-indicator {margin: 0;padding: 0;list-style: none;display: flex;align-items: center;}.slider-indicator li {width: 8px;height: 8px;margin: 4px;border-radius: 50%;background: #fff;opacity: 0.4;cursor: pointer;}.slider-indicator li.active {width: 12px;height: 12px;opacity: 1;}</style>
</head><body><div class="slider"><div class="slider-wrapper"><img src="./images/slider01.jpg" alt="" /></div><div class="slider-footer"><p>对人类来说会不会太超前了?</p><ul class="slider-indicator"><li class="active"></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><div class="toggle"><button class="prev">&lt;</button><button class="next">&gt;</button></div></div></div><script>// 1. 初始数据const sliderData = [{ url: './images/slider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgb(100, 67, 68)' },{ url: './images/slider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgb(43, 35, 26)' },{ url: './images/slider03.jpg', title: '真正的jo厨出现了!', color: 'rgb(36, 31, 33)' },{ url: './images/slider04.jpg', title: '李玉刚:让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },{ url: './images/slider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },{ url: './images/slider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },{ url: './images/slider07.jpg', title: '一站式解决你的电脑配置问题!!!', color: 'rgb(53, 29, 25)' },{ url: './images/slider08.jpg', title: '谁不想和小猫咪贴贴呢!', color: 'rgb(99, 72, 114)' },]const img = document.querySelector('.slider-wrapper img')const p = document.querySelector('.slider-footer p')const footer = document.querySelector('.slider-footer')let i = 0setInterval(function () {i++if (i >= sliderData.length) {i = 0}img.src = sliderData[i].urlp.innerHTML = sliderData[i].titlefooter.style.backgroundColor = sliderData[i].colordocument.querySelector('.slider-indicator .active').classList.remove('active')document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')}, 1000)</script>
</body></html>

第二天:DOM事件基础,注册事件,tab栏切换

第三天:DOM事件进阶,事件对象,事件委托

第四天:DOM节点操作,节点的增删查改

第五天:BOM浏览器操作,插件,本地存储

第六天:正则表达式

第七天:小兔鲜儿实战

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

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

相关文章

怎样在公司将手机屏幕(远程)投屏到家里的大电视上?

我不住家里&#xff0c;前几次回去都会替老爸老妈清理手机。这两个星期没空回去&#xff0c;老爸吐槽手机用几天就又卡了&#xff0c;其实就是清理一些手机缓存的问题。 我说我远程控制他的手机&#xff0c;给他清理一下。他一听“控制”就不喜欢&#xff0c;说我大了&#xf…

3600关成语填字APP游戏ACCESS\EXCEL数据库

成语类的APP游戏在最近一两年内非常的火爆&#xff0c;其主要原因是几乎所有中国人都能够冲个几十上百关&#xff0c;学习和趣味共享。看图猜成语类的数据之前已经弄到过很多&#xff0c;今天这份成语填字的倒是头一份。 该数据做成的APP效果如下&#xff1a; 数据以\符号分隔…

Java JVM 垃圾回收算法详解

Java 虚拟机&#xff08;JVM&#xff09;是运行 Java 应用程序的核心&#xff0c;它的垃圾回收&#xff08;Garbage Collection, GC&#xff09;机制是 JVM 中非常重要的一个部分。垃圾回收的主要任务是自动管理内存&#xff0c;回收那些不再被使用的对象&#xff0c;从而释放内…

【机器学习】机器学习引领未来:赋能精准高效的图像识别技术革新

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f50d;1. 引言&#x1f4d2;2. 机器学习基础与图像识别原理&#x1f341;机器学习概述&#xff1a;监督学习、无监督学习与强化学…

Ubuntu系统+宝塔面板部署Frp内网穿透服务

一、搭建目的 上次在局域网中搭建了自己的个人网盘之后&#xff0c;上传文件、照片都很方便&#xff0c;但是只能限制在内网中访问&#xff01;所以这次再搭建一个内网穿透服务器&#xff0c;这样不管在哪里都能访问到家里的云盘&#xff01; 二、内网穿透Frp是什么&#xff1…

【超详细】Linux开发环境搭建指南 | Ubuntu

文章目录 虚拟机安装对比Virtual Box 下载ubuntu 操作系统下载Virtual Box 安装安装ubuntu设置中文语言共享文件夹设置添加输入法安装步骤&#xff0c;参考官方教程 安装 vscode解决主机不能通过ssh连接宿主机网络连接几种网络连接区别主机和宿主机相互 ping通 网络代理 虚拟机…

智能未来:低代码与AI如何重塑企业应用开发

引言 在当今瞬息万变的商业环境中&#xff0c;企业面临着前所未有的挑战与机遇。数字化转型已经成为各行各业的必然趋势&#xff0c;而在这一过程中&#xff0c;应用开发的效率与智能化程度成为企业竞争力的重要衡量标准。传统的开发模式往往需要大量的时间和资源&#xff0c;而…

图像边缘检测技术详解:利用OpenCV实现Sobel算子

图像边缘检测技术详解&#xff1a;利用OpenCV实现Sobel算子 前言Sobel算子的原理代码演示结果展示结语 前言 在数字图像处理的广阔领域中&#xff0c;边缘检测技术扮演着至关重要的角色。无论是在科学研究、工业自动化&#xff0c;还是在日常生活中的智能设备中&#xff0c;我们…

《大道平渊》· 廿壹 —— 杀心篇:何谓 “杀心”?本质上,就是寻求杀心的一个过程。

《大道平渊》 "行有不得&#xff0c;反求诸己。" ——《论语 学而》 指的是遇事遭困&#xff0c;须在自身寻因&#xff0c;而非怨天尤人&#xff0c;一味地归咎于外因。 凡事向内求也&#xff0c;多多自省&#xff0c;提高自身的修养和能力&#xff0c;取得成功。…

Hadoop 下载

下载法一&#xff1a;官方下载 hadoop官网 1.选择要下载的版本&#xff0c;这里我以3.4.0为例进行说明&#xff1b; 2.跳转后&#xff0c;选择对应系统架构的&#xff0c;进行下载&#xff1b; 下载法二&#xff1a;国内镜像源下载 1.阿里云 这里我以mac m1为案例&#x…

Netlify 为静态站点部署 Waline 评论系统

目录 1 准备工作2 简介2.1 Netlify2.2 Waline2.3 Leancloud 3 开始搭建3.1 Fork 仓库3.2 设置 Leancloud3.3 部署 Netlify3.4 查看评论系统 从我建成个人网站以来&#xff0c;一个月了&#xff0c;竟然还没配置过评论系统&#xff0c;一直用的别人的 awa。 那么今天就稍微研究…

源代码为啥要进行加密?怎么给源代码进行加密?

在当今高度数字化的世界里&#xff0c;软件开发已经成为企业竞争力的重要组成部分。源代码作为软件的核心资产&#xff0c;包含了企业的核心技术和商业机密&#xff0c;因此其安全性至关重要。然而&#xff0c;源代码泄露的风险始终存在&#xff0c;无论是由于内部人员的不当行…

神仙公司名单(北京篇)

欢迎来到小落科技每日分享频道 大家好&#xff0c;秋招已经火热进行中了&#xff0c;不知道大家准备得怎么样了&#xff1f;特别是咱们25届的小伙伴们&#xff0c;有没有找到心仪的目标&#xff1f; 想必大家最近和我一样&#xff0c;忙着在各种招聘平台上搜罗信息&#xff0c…

云计算实训41——部署project_exam_system项目(续)

# 创建脚本&#xff0c;可以在java环境中运行任何的jar包或者war包#!/bin/bash/usr/local/jdk/bin/java -jar /java/src/*.?ar一、思路分析 &#xff08;1&#xff09;nginx 1、下载镜像&#xff0c;将本地的dist项目的目录挂载在容器的/usr/share/nginx/html/ 2、启动容器 …

HTTPS理论(SSL/TLS)

SSL安全套接层协议 为互联网通信提供加密和身份认证SSL3.0有漏洞&#xff0c;被TLS取代基于TCP的协议工作原理 握手&#xff1a;客户端hello&#xff1b;服务器hello&#xff08;发送数字证书&#xff09;&#xff08;协商ssl版本&#xff0c;加密算法&#xff09;数据传输连接…

gcc编译与Linux下的库

gcc与g编译 GCC&#xff1a;GCC是一个由GNU项目开发的多平台编译器&#xff0c;最初是为C语言设计的编译器&#xff0c;但随着时间的发展&#xff0c;它已经扩展到支持多种编程语言。它支持多种编程语言&#xff0c;包括C、C、Objective-C、Fortran、Ada和Go等。GCC是自由软件&…

【路径规划】在MATLAB中使用粒子群优化(PSO)进行最优移动机器人路径规划

摘要 本文介绍了使用粒子群优化&#xff08;Particle Swarm Optimization, PSO&#xff09;算法实现移动机器人的路径规划。PSO是一种基于群体智能的优化算法&#xff0c;通过模拟粒子群体在搜索空间中的迭代更新&#xff0c;找到全局最优路径。本文通过MATLAB仿真展示了PSO在…

惠中科技RDS自清洁膜层:光伏领域的绿色革命

惠中科技RDS自清洁膜层&#xff1a;光伏领域的绿色革命 在全球能源转型和光伏产业蓬勃发展的背景下&#xff0c;光伏电站的运营维护面临着诸多挑战&#xff0c;其中灰尘污染问题尤为突出。灰尘的堆积不仅降低了光伏板的透光率&#xff0c;还直接影响了电站的发电效率和经济效益…

【深度学习与NLP】——词嵌入Embedding技术

目录 1.词嵌入的作用 2.嵌入矩阵的计算 3.Embedding层的代码实验 词嵌入&#xff08;Embedding&#xff09;技术是一种将词汇映射到低维连续向量空间的方法。将离散的单词数据处理成连续且固定长度的向量&#xff0c;使模型可以学习和处理语义信息。 假设需要将["Are&…

数组和指针 笔试题(3)

目录 11.笔试题11 12.笔试题12 13.笔试题13 14.笔试题14 11.笔试题11 //笔试题11(难&#xff09;int a[5][5];//创建25个int类//p[]1[]2[]3[]4[]5 []6[]7[]8[]9[]10 []11[]12[]13[]14[]15 []16&#xff08;p[4]&#xff09;[][]&#xff08;p[4][2]&#xff09;[][] [][]&a…