APIs学习

DOM获取元素

Web-API基本认知

const优先使用

原因:

  1. 语义化更好
  2. 不会被更改

作用和分类

作用:就是使用JS去操作html和浏览器

分类:DOM(文档对象模型)、BOM(浏览器对象模型)

什么是DOM

  1. DOM(document Object MOdel)是用来呈现以及与任意HTML或XML文档交互的API
  2. 白话文:DOM是浏览器提供的一套专门用来操作网页内容的功能
  3. 作用:开发网页内容特效和实现用户交互

DOM树

  1. 将HTML文档以树状结构直观表现出来
  2. 描述网页内容关系的名词
  3. 作用:文档树直观体现出标签与标签之间的关系

DOM对象

  1. DOM对象:浏览器根据html标签生成的JS对象
  • 所有的标签属性都可以在这个对象上面找到
  • 修改这个对象的属性会自动映射到标签上
  1. DOM的核心思想:把网页内容当成对象处理
  2. document.write对象
  • 是DOM里提供的一个对象
  • 用来访问和操作网页内容
  • 网页所有内容都在document内容里

拓展

console.log():直接显示内容

console.dir():展示对象的完整结构、属性、原型链

获取DOM对象

  1. 根据CSS选择器方式获取
  • 获取一个
    获取匹配的第一个元素
js 复制代码
document.querySelector()
  • 获取多个
js 复制代码
document.querySelectorAll()

得到一个伪数组:没有数组方法

如须获得里面的每个对象,需使用for循环

  1. 其他方式

操作元素内容

方式:

  1. 对象.innerText属性:不解析标签
  2. 对象.innerHTML属性:解析标签

操作元素属性

修改元素常用属性

href、title、src等

语法:对象.属性 = 值

修改元素样式属性

  1. 通过style属性操作CSS

语法:

js 复制代码
box.style.属性 = ''
  1. 通过类名修改样式
  • 语法:
js 复制代码
元素.className = 'active'
  • 注意:className是用新值换旧值,如果需要添加一个类,需要保持之前的类名
  1. 通过classList修改样式

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

语法:

元素.classList.add('类名')

元素.classList.remove('类名')

元素.classList.toggle('类名') 切换

  1. className 和 classList的q区别:
    修改大量样式的时候方便
    修改不多样式的时候方便
    classLiat是追加和删除不影响以前的类名

操作表单元素属性

  1. 获取:DOM对象.属性名
  2. 设置:DOM对象.属性名 = 新值
  3. 表单属性中添加就有效果,移除就没有效果,一律使用布尔值表示,如果为true代表添加该属性,否则为移除
  4. disabled、checked、selscted

H5自定义属性

  1. 标准属性:标签天生自带的属性,可以直接使用点语法操作
  2. 自定义属性:
  • 在html5中堆出来了专门的data-自定义属性
  • 在DOM对象上一律以dataset对象方式获取
  • 一律以data-开头

定时器-间歇函数

  1. 每隔一段时间需要自动执行一段代码,无需手动触发
  2. 定时器函数有两种:间歇函数,

开启定时器:setInterval(函数,间隔时间)

关闭定时器:clearInterval(变量名)

事件监听

事件:事件是在编程时系统内发生的动作或者发生的事情

事件监听:有事件触发,则立即调用一个函数做出响应,也称绑定事件或注册事件

  1. 语法:元素对象.addEventListener('事件类型',执行函数)
  2. 三要素:
  • 事件源
  • 事件类型
  • 事件调用的函数

事件监听版本

事件类型

  1. 鼠标事件 **right.click()**自动调用点击事件
  • click 鼠标点击
  • mouseenter 鼠标经过
  • mouseleave 鼠标离开
  1. 焦点事件
  • focus 获取光标
  • blur 失去焦点
  1. 键盘事件
  • keydown 键盘按下触发
  • keyup 键盘抬起触发
  1. 文本事件
  • input 用户输入

事件对象

获取事件对象

语法:如何获取

在事件绑定的函数的第一个参数就是

常见事件对象属性

环境对象

指的是函数内部特殊的变量this,代表所处的环境

谁调用,this就是谁

回调函数

  1. 如果将函数A作为参数传递给函数B,我们称A为回调函数
    如:定时器、绑定事件
  2. 使用匿名函数作为回调函数比较常见

DOM事件进阶

事件流

事件流值的是时间完整执行过程的流动路径

两个阶段:捕获阶段、冒泡阶段

事件捕获

从大到小、从外到内

  1. 事件捕获概念:从DOM的根元素开始去执行对应事件
  2. 事件捕获需要写对应代码才能看到效果
  3. 代码:
js 复制代码
DOM.addEventListener(事件类型,事件处理函数,是否使用捕获机制)
  1. 说明:
  • addEventListener第三个参数传入true代表捕获阶段触发
  • 若传入false代表冒泡阶段触发
  • 若使用L0监听,只有冒泡阶段

事件冒泡

从小到大、从里到外

  1. 当一个元素触发事件后,会依次向上调用所有父级元素的同名事件
  2. 事件冒泡是默认存在的

阻止冒泡

导致事件影响到父级元素

前提:拿到事件对象

语法:

js 复制代码
事件对象.stopPropagation()

阻止流动传播

解绑事件

on事件方式,直接使用null覆盖就可以实现事件解绑

匿名函数无法被解绑

L0语法:

js 复制代码
btn.onclick = function() {
    alert('')
}
btn.onclick = null

L2语法:

js 复制代码
const btn = document.querySelector('button')
        function fn() {
            alert('点击了')
        }
        btn.addEventListener('click', fn)
        btn.removeEventListener('click', fn)

鼠标经过事件的区别

mouseover、mouseenter、mouseleave、mouseout

  1. mouseover、mouseout会有事件冒泡
  2. mouseenter、mouseleave没有

事件委托

利用事件流的特征解决一些开发需求的知识技巧

优点:减少在注册次数,提高程序性能

原理:利用事件冒泡

  • 给父元素注册事件,当触发子元素,会冒泡到父元素
  • 找到真正出发的元素:e.target.tagName = ''

阻止默认行为

如:链接跳转、表单域跳转

事件对象.preventDefault()

html 复制代码
<body>
    <form action="">
        <input type="text" value="免费注册">
    </form>
    <script>
        const form = document.querySelector('form')
        form.addEventListener('submit', function (e) {
            e.preventDefault()
        })
    </script>
</body>

其它事件

页面加载事件

  1. 加载外部资源加载完毕时触发的事件
  2. 原因:
  • 需要等页面资源全部处理完了做一些事情
  • 老代码喜欢吧script写在head中,这是直接找dom元素找不到
  1. 事件名:load
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>
    <script>
        window.addEventListener('load', function () {
            const btn = document.querySelector('button')
            btn.addEventListener('click', function () {
                alert(11)
            })
        })
    </script>
</head>

<body>
    <button>点击</button>
</body>

</html>
  1. 不仅可以监视整个页面,也可而已针对某个资源绑定
  2. DOMContentLoaded 给document添加,运行更快

元素滚动事件

  1. 滚动条在滚动的时候持续触发
  2. 应用场景: 固定导航栏、返回顶部
  3. 事件名:scroll
  4. 监听整个页面滚动:
js 复制代码
window.addEventListener('scroll', function () {
            console.log(我滚了);

        })
  1. 获取位置

    scrollLeft和scrollTop

  2. 拓展-获取html的写法 document.documentElement

  3. scrollTo()

页面尺寸事件

  1. 会在窗口改变时触发
  2. 事件名: resize
  3. 获取元素宽高:client家族

元素尺寸与位置

尺寸

  1. 获取宽高
  • 获取元素的自身宽高、包含元素自身设置的宽高、padding、border
  • offsetWidth、offsetHeight
  • 获取出来的是数值
  • 获取的是可视宽高、若隐藏则为0
  1. 获取位置
    距离最近得有定位元素的父盒子的位置
  • offsetLeft、offsetTop
  • element.getBoundingClientRect() 返回元素的大小及其相对于视口的位置

总结

日期对象

用来表示时间的对象

作用:可以获得当前系统时间

实例化

使用new关键字都称为实例化

js 复制代码
const date = new Date()
console.log(date);

时间对象方法

date.toLocalString() 直接返回时间

时间戳

  1. 使用场景:计算倒计时效果,无法直接计算,需要借助时间戳
  2. 定义:是指时间的毫秒数,是一种特殊的计算时间的方法
  3. 算法:
  • 将来的时间戳 - 现在的时间戳 = 剩余时间毫秒数
  • 剩余时间毫秒数 转换为剩余时间 的年月日时分秒就是倒计时时间

获取时间戳的三种方法

  1. getTime()
    实例化,可以返回当前时间
js 复制代码
const date = new Date()
console.log(date.getTime());
  1. +new Date()
    无需实例化,可以返回当前时间
js 复制代码
console.log(+new Date());
  1. Date.now()
    无需实例化,不能返回当前时间
js 复制代码
console.log(Date.now());

节点操作

DOM节点

  1. 定义:DOM树里每一个内容都称之为节点
  2. 节点类型:
  • 元素节点:所有的标签、html是根节点
  • 属性节点:所有的属性
  • 文本节点:所有的文本
  • 其他:

查找结点

节点关系:针对的找亲戚返回的都是对象

  • 父节点:parentNode属性 最近一级的父盒子
  • 子节点: childern属性 选择最近一级的子元素
  • 兄弟节点:
    下一个兄弟节点:nextElementSibling属性
    上一个兄弟节点:previousElementSibling属性

增加节点

  1. 一般我们新增节点,有如下操作:
  • 创建新节点
  • 把新节点放入指定元素内部
  1. 创建节点

    方法:'document.creatElement()'

  2. 追加节点

  • 插入到父元素的最后一个子元素

    '父元素.appendChild(要插入的元素)'

  • 插入到父元素中某个子元素的前面

    '父元素.insertBefore(要插入的元素,在那个元素前面)'

  1. 克隆节点

复制一个原有的节点,并放入指定元素内部

元素.cloneNode(布尔值)

  • 布尔值为true,则会包含后代节点一起克隆
  • 若为false,则不包含后代节点
  • 默认为false

浅克隆:只克隆标签

删除节点

  1. 要删除节点必须通过父元素
  2. 父元素.removeChild(要删除的元素)
  3. 如果不存在父子关系则删除不成功
  4. 删除节点与隐藏节点有区别:隐藏节点仍存在,但删除节点则从html中删除

M端事件

触屏事件:touch

JS插件

swiper插件

BOM

Window对象

浏览对象模型-BOM

BoM在整个浏览器,BOM包含DOM

定时器-延时函数

  1. 延迟函数:setTimeout(回调函数,时间)

  2. 仅执行一次

  3. 清除延迟函数:clearTimeout()

  4. 间歇函数与延时函数区别:

    延时函数执行一次

    间歇函数多次执行

JS执行机制

  1. JS的一大特点为单线程,同一时间只能做一件事,如果JS执行过程太长,回造成页面渲染不连贯,导致页面加载阻塞

  2. 为解决这一问题,JS出现同步和异步

  3. 同步:程序执行顺序与任务排列顺序一致

  4. 异步:同时执行其他人物

  5. 同步任务与异步人物

  6. 先执行执行栈中的同步任务,异步任务放入任务队列,一旦同步任务执行完毕,系统会依次读取异步任务,称为事件循环(event loop)

location对象

  1. 拆分并保存URL地址
  2. href属性 location.href可以跳转页面
  3. search属性 获取地址中携带的参数,符号?后面部分
  4. reload方法 刷新当前页面 true强制刷新
  5. hash属性 获取地址中的啥希值,符号# 后面部分
  1. 记录了浏览器自身的相关信息
  2. userAgent记录浏览器的版本以及平台

history对象

  1. 主要管理历史记录,如前进、后退、历史记录
  2. 常见属性和方法:

本地存储

本地存储介绍

  1. 数据存储在用户浏览器中
  2. 设置、读取方便,页面刷新也不会丢失数据
  3. 容量大
  4. 只能存储字符串数据类型

本地存储分类-localStorage

  1. 作用:将数据永久存储在本地,除非手动删除
  2. 语法:
  • 存储数据:localStorage.setUtem(key,value)
  • 获取数据:localStorage.getItem(key)
  • 删除数据:localStorage.removeItem(key)
  • 修改数据:localStorage.setItem(key1,key2)

本地存储分类-sessionStorage

  1. 特征:
  • 生命周期为关闭浏览器窗口
  • 以键值对的方式存储
  • 在同一个窗口下数据可以共享
  • 用法跟localStorage基本相同

存储复杂数据类型

  1. 将复杂数据类型转换为字符串
  2. JSON.stringify(复杂数据类型) / 深拷贝方法
html 复制代码
<script>
        const obj = {
            uname: 'pink老师',
            age: 18,
            gender: '女'
        }
        localStorage.setItem('obj', JSON.stringify(obj))
</script>
  1. 将JSON字符串转换为对象
  2. JSON.parse()
html 复制代码
<script>
const str = localStorage.getItem('obj')
console.log(JSON.parse(str))
</script>

map和join方法 字符串拼接方法

map方法

  1. 使用场景:遍历数组处理数据,返回新数组
  2. 语法:
js 复制代码
const arr = ['red', 'green', 'blue']
        const newArr = arr.map(function (ele, index) {
            return ele + '颜色'
        })
        console.log(newArr)

join方法

  1. 作用:用于把数组中的所有元素转换为一个字符串
  2. 语法:
js 复制代码
console.log(newArr.join()) //有逗号分隔
console.log(newArr.join(''))//无分隔符

正则表达式 字面量://

介绍

  1. 正则表达式用于匹配字符串中字符组合的模式,正则表达式也是对象
  2. 许多语言都具有正则表达式
  3. 应用场景:
  • 例如验证表单:用户名表单只能输入英文字母、数字或者下划线,昵称输入框可以输入中文
  • 可以过滤掉页面内容中的敏感词,或从字符串中获取特定部分

语法

  1. 定义规则

const 变量名 = /表达式/

返回的是true/false

  1. 根据规则查找
  • test() 方法
html 复制代码
<script>
        const str = '我们一起学前端'
        const reg = /前端/

        console.log(reg.test(str));

    </script>
  • exec() 方法
    返回的是一个数组,否则为null

元字符

一些具有特殊含义的字符,可以极大提高灵活性和匹配功能

如:26个英文字母 [a-z]

  1. 分类:
  • 边界符(表示位置,开头和结尾,用什么开头,用什么结尾)
    ^ 以什么开头
    & 以什么结尾
js 复制代码
 console.log(/哈/.test('哈哈'))
        console.log(/^哈/.test('哈哈'))
        console.log(/^哈/.test('二哈'))
        console.log(/哈$/.test('哈哈'))
        console.log(/^哈$/.test('哈哈'))//这种为false
        console.log(/^哈$/.test('哈')) //这种情况为true
  • 量词(表示重复次数)
    *类似 >=0
    +类似 >=1
    ? 0或1
    {n} 写几就必须出现几次
    {n,} >= n
    {n,m} 大于等于n小于等于m
  • 字符类(比如/d或 0~9)

\] 匹配字符集合 只能选一个 \[\]里加上-连字符 使用连字符-表示一个范围 ```js console.log(/[a-z]/.test('c')) console.log(/^[1-9][0-9]{4,}/.test('917754904')) ``` \[\]里加\^取反符号 预定义:常见模式的简写方式 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/df228e43ab214ea4b5165e0d3bd2d231.png) ### 修饰符 约束正则执行的某些细节行为,如区分大小写、是否支持多行匹配 /表达式/修饰符 1. i忽略大小写 2. g匹配所有正则表达式,全局查找 3. replace 替换 ```html ``` ## 案例展示 ### 年会抽奖 ```html Document

传智教育年会抽奖

一等奖:

二等奖:

三等奖:
``` ### 定时器版轮播图 ```html Document
``` ### 完整版轮播图 ```html Document
``` ### 学生信息案例 ```html Document

新增成员

姓名: 年龄: 性别: 薪资: 就业城市:

就业榜

学号 姓名 年龄 性别 薪资 就业城市 操作
``` ### 学生就业统计表案例 ```html Document

新增成员

姓名: 年龄: 性别: 薪资: 就业城市:
共有数据

学生就业信息表

ID 姓名 年龄 性别 薪资 就业城市 录入时间 操作
``` ### 表单验证案例 ```html Document ``` 只展示了几个综合案例,由于案例过多,就不一一展示 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c3b93db18ff2447492bfd86e74f4aed0.png)

相关推荐
运营小白1 小时前
2026 年 Shopify 关键词映射指南:从混乱到有序的实战经验
前端·一人公司·seonib·自动化内容·搜索流量
吃好睡好便好1 小时前
说说梳头的保健作用
学习
Dxy12393102161 小时前
HTML的Iframe详解
前端·html
dsyyyyy11011 小时前
CSS定位布局和网格布局
前端·css
wuxinyan1231 小时前
工业级大模型学习之路013:RAG零基础入门教程(第九篇):RAG幻觉治理
人工智能·学习·rag
码码哈哈0.01 小时前
macos26 Liquid class 示例代码
前端
zithern_juejin2 小时前
ES6——Symbol
javascript
hhemin2 小时前
web前端给项目加入skills目录,Ai自动查找技能(后端也能参考)
前端