JavaScript进阶:WebAPIs重点知识整理2

news2024/9/29 19:27:59

目录

1 对节点的相关操作

1.1 查找节点

1.1.1 查找节点的父节点

1.1.2 查找节点的子节点

1.1.3 查找节点的兄弟节点

1.2 新增节点(先创建,后追加)

1.3 克隆节点

1.4 删除节点

2 M 端(移动端)事件

3 JS清空表单的方法

4 swiper 插件的使用

5 延时函数

6 JS的执行机制

6.1 首先看一道面试题

7 location 对象

8 navigator 对象

9 history 对象


之前我们都是直接使用 document.querySelector('选择器'); 来直接获取元素节点的,下面将介绍通过节点与节点之间的关系,来对指定的节点进行操作。毕竟“打虎亲兄弟,上阵父子兵”.

1 对节点的相关操作

1.1 查找节点

1.1.1 查找节点的父节点


        const baby = document.querySelector('.baby')
        console.log(baby)
        console.log(baby.parentNode)  // 获取 dad
        console.log(baby.parentNode.parentNode)  // 获取 yeye
        console.log("--------------------")

1.1.2 查找节点的子节点

返回一个伪数组, 选择的是亲儿子,最近一级的


        const dad = document.querySelector('.dad')
        console.log(dad.children)  // 返回一个伪数组, 选择的是亲儿子,最近一级的
        console.log('-------------------')

1.1.3 查找节点的兄弟节点


        console.log(baby.previousElementSibling)  // 返回的是上一个节点
        console.log(baby.nextElementSibling)  // 返回的是下一个节点
        console.log("--------------------")

1.2 新增节点(先创建,后追加)



        //1. appendChild  插入到父元素的最后面
        const li = document.createElement('li')  // 创建节点li
        li.innerHTML = '我是新增的li'
        document.body.appendChild(li)  // 追加节点li

        //2. insertBefore  插入到指定的元素的前面
        const lipre = document.createElement('li')  // 创建节点li
        lipre.innerHTML = '我是新增的lipre'
        document.body.insertBefore(lipre, li)  // 追加节点lipre

1.3 克隆节点


        const ul = document.querySelector('ul')
        // 克隆
        const li1 = ul.children[0].cloneNode(true)  // 参数为true,表示深拷贝,拷贝的是里面的内容,如果为false,为浅拷贝,则只拷贝标签本身,不拷贝内容。
        // 追加
        ul.appendChild(li1)

1.4 删除节点


ul.removeChild(ul.children[1])  // 删除第2个子节点

2 M 端(移动端)事件



3 JS清空表单的方法

可以用于当用户提交表单后,自动清空表单内容  reset()

4 swiper 插件的使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./swiper/swiper.min.css">
    <link rel="stylesheet" href="./swiper/swiper-bundle.min.css">

    <style>
        .box {
            position: relative;
            margin: 100px auto;
            width: 800px;
            height: 400px;
            background-color: skyblue;
            /* z-index:1; */
        }

        html,
        body {
            position: relative;
            height: 100%;
        }

        body {
            background: #eee;
            font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
            font-size: 14px;
            color: #000;
            margin: 0;
            padding: 0;
        }

        .swiper {
            width: 100%;
            height: 100%;
        }

        .swiper-slide {
            text-align: center;
            font-size: 18px;
            background: #fff;
            display: flex;
            justify-content: center;
            align-items: center;
        }

        .swiper-slide img {
            display: block;
            width: 100%;
            height: 100%;
            object-fit: cover;
        }
    </style>
</head>
<body>
    <div class="box">
        <!-- Swiper -->
        <div class="swiper mySwiper">
            <div class="swiper-wrapper">
            <div class="swiper-slide">Slide 1</div>
            <div class="swiper-slide">Slide 2</div>
            <div class="swiper-slide">Slide 3</div>
            <div class="swiper-slide">Slide 4</div>
            <div class="swiper-slide">Slide 5</div>
            <div class="swiper-slide">Slide 6</div>
            <div class="swiper-slide">Slide 7</div>
            <div class="swiper-slide">Slide 8</div>
            <div class="swiper-slide">Slide 9</div>
            </div>
            <div class="swiper-pagination"></div>
        </div>
    </div>
    
    <script src="./swiper/swiper.min.js"></script>
    <script src="./swiper/swiper-bundle.min.js"></script>

    <!-- Initialize Swiper -->
    <script>
        var swiper = new Swiper(".mySwiper", {
            pagination: {
                el: ".swiper-pagination",  // 显示的小圆点
            },

            // 自动播放
            // autoplay:true,//等同于以下设置
            autoplay: {
                delay: 1000,
                stopOnLastSlide: false,
                disableOnInteraction: false,   // 触摸之后是否继续播放
            },

            // 键盘控制
            keyboard: {
                enabled: true,
                onlyInViewport: true,
            },

            parallax : true, // 切换更有层次感
        });
    </script>
</body>
</html>


5 延时函数

    <script>
        // 语法:
            // setTimeout(回调函数, 等待的毫秒数)

        let timer = setTimeout(function(){
            console.log('setTimeout')
        },2000)

        // 清除延时函数:
        // clearTimeout(延时函数的ID)
        clearTimeout(timer)

    </script>

6 JS的执行机制

6.1 首先看一道面试题

        // 面试题:
        // 代码1:
        console.log(111)
        setTimeout(function() {
            console.log(222)
        },1000)

        console.log(333)   // 111 333 222


        console.log("-------------------")


        // 代码2:
        console.log(111)
        setTimeout(function() {
            console.log(222)
        },0)

        console.log(333)  // 111 333 222

代码2中已经将延时器的时间定为0了,为什么输出的结果和代码1一样呢???

解答: 

1. js语言的一大特点是单线程的,也就是说同一时间只做一个任务

2. 任务又分为同步任务和异步任务

3. JS的执行机制是先执行同步任务,遇到异步任务,就将异步任务放入任务队列中,一旦执行栈中的同步任务执行完后,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行。

4. 其实对于在异步任务进入任务队列前,还是有一步操作的,那就是异步任务将被提交给对应的异步进程处理,也就是浏览器进行处理,在处理中,是多线程的,多个任务同时进行,先结束的就先进入任务队列进行排队,等待系统读取。

5.上述的过程就成为事件循环

7 location 对象

        // 1. location的href属性
        const btn = document.querySelector('button')
        const div = document.querySelector('div')
        const p = document.querySelector('p')

        btn.addEventListener('click', function(e) {
            window.location.href = 'https://www.baidu.com'
        })
        
        // // 声明倒计时变量
        let i = 5
        let timer =  setInterval(function() {
            i--
            if (i === 0) {
                clearInterval(timer)
                window.location.href = 'https://www.baidu.com'
            }
            p.innerHTML = `<span>${i}</span>秒后自动跳转`
        }, 1000)

        setTimeout(function() {
            window.location.href = 'https://www.baidu.com'
        }, 3000)
        // 3秒后跳转到百度




        // 2. location的search属性: 获取地址中携带的参数,符号 ? 后面的部分
        console.log(window.location.search)




        // 3. location的hash属性: 获取地址中携带的参数,符号 # 后面的部分
        console.log(window.location.hash)  // 为后期的vue路由铺垫,经常用于不刷新页面,显示不同的页面

        

        // 4. location的reload方法: 刷新页面
        // location.reload()  传入参数true表示强制刷新
        const reloadBtn = document.querySelector('.reload')

        reloadBtn.addEventListener("click", function() {
            location.reload()
            // location.reload(true)   表示强制刷新
        })

    </script>

8 navigator 对象

        // navigator对象获取浏览器的相关信息
        // 常见的属性和方法
        // ->通过userAgent检测浏览器的版本及平台

        // 检测 userAgent (浏览器信息)
        (function () {
            const userAgent = navigator.userAgent

            // 验证是否为Android或者iPhone
            const isAndroid = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/)
            const isIPhone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/)
            const isIpad = userAgent.match(/(iPad).*OS\s([\d_]+)/)

            if (isAndroid || isIPhone || isIpad) {
                window.location.href = "http://m.itcast.cn" // 跳转到移动端页面
            }
        })();
    </script>

9 history 对象

<body>
    <button class="btn1">前进</button>
    <button class="btn2">后退</button>
    <a href="http://www.baidu.com">百度</a>

    <script>
        const btn1 = document.querySelector('.btn1')
        const btn2 = document.querySelector('.btn2')

        btn1.addEventListener('click', function (){
            // history.forward()   // 前进
            history.go(1)  // 前进
            // history.go(-1)  // 后退
            // history.go(0)  // 刷新
            // history.go(2)  // 前进两步
            // history.go(-2)  // 后退两步
        })

        btn2.addEventListener('click', function(){
            history.back()  // 后退
        })
    </script>
</body>

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

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

相关文章

hadoop集群规划部署

一、集群规划 三台硬件资源&#xff0c;部署hadoop版本&#xff0c;hadoop-3.3.5 &#xff0c;部署后配置文件。 Hadoop配置文件分两类&#xff1a;默认配置文件和自定义配置文件。 hadoop102hadoop103hadoop104HDFS NameNode DataNode DataNode SecondaryNameNode DataN…

深度强化学习Task3:A2C、A3C算法

本篇博客是本人参加Datawhale组队学习第三次任务的笔记 【教程地址】 文章目录 Actor-Critic 算法提出的动机Q Actor-Critic 算法A2C 与 A3C 算法广义优势估计A3C实现建立Actor和Critic网络定义智能体定义环境训练利用JoyRL实现多进程 练习总结 Actor-Critic 算法提出的动机 蒙…

Matlab|基于改进遗传算法的储能选址定容(可任意设定储能数量)

目录 主要内容 部分代码 结果一览&#xff08;以3个储能为例&#xff09; 下载链接 主要内容 该模型采用改进遗传算法优化配电网系统中储能选址位置和容量&#xff0c;程序以IEEE33节点系统为分析对象&#xff0c;以网损最小为目标&#xff0c;采用matpower实现系…

谷粒商城-微服务架构图

整体架构 分布式划分图

蓝牙运动耳机什么牌子的好?蓝牙运动耳机品牌排行榜前十名

​运动耳机是耳机中使用场景最广泛的一类&#xff0c;特别适合户外运动、健身和骑行等场景。在众多运动耳机中&#xff0c;哪一款更值得入手呢&#xff1f;今天我将向大家推荐几款相当不错的运动耳机&#xff0c;它们不仅音质上乘&#xff0c;还能满足不同运动场景的需求。 1.…

ozon促销活动100+店铺如何多店铺批量加入活动产品?ozon促销产品怎么删除?

很多Ozon卖家为实现店铺引流&#xff0c;会参与许多官方促销活动&#xff0c;如果每个活动都需要单独管理&#xff0c;会消耗不少的时间成本&#xff0c;操作起来也会非常困难。 尤其是随着运营店铺数量的增加&#xff0c;多个店铺多个促销活动来回切换管理&#xff0c;不仅耗…

modbus poll测试工具测试modbus tcp与PLC设备连接使用方法

socket默认端口是502&#xff0c;socket连上之后&#xff0c; 按照modbuspoll工具设置的读写参数 生成的RTU命令格式去组装读PLC的设备数据 modbuspoll工具配置&#xff0c;以v9.9.2中文破解版为例&#xff1a; 首先点连接菜单&#xff08;connection&#xff09;建立连接&…

Database history tablesupgraded

zabbix升级到6之后&#xff0c;配置安装完成会有一个红色输出&#xff0c;但是不影响zabbix使用&#xff0c;出于强迫症&#xff0c;找到了该问题的解决方法。 Database history tables upgraded: No. Support for the old numeric type is deprecated. Please upgrade to nume…

C++:优先队列-Priority_queue

目录 1.关于优先队列 2.priority_queue的使用 1.构造方法 2.empty();判空 3.size(); 4.top(); 5.push(val); 6.pop(); 3.优先队列模拟实现 4.用优先队列解决数组中第K个大的元素 1.关于优先队列 在C中&#xff0c;可以使用STL&#xff08;标准模板库&#xff09;中的p…

【第十五课】数据结构:堆 (“堆”的介绍+主要操作 / acwing-838堆排序 / 时间复杂度的分析 / c++代码 )

目录 关于堆的一些知识的回顾 数据结构&#xff1a;堆的特点 "down" 和 "up"&#xff1a;维护堆的性质 down up 数据结构&#xff1a;堆的主要操作 acwing-838堆排序 代码如下 时间复杂度分析 确实是在写的过程中频繁回顾了很多关于树的知识&…

C++基础语法和用法

文章目录 1.hello world2.引入namespace(命名空间/域问题)3.输入输出4.缺省参数/默认参数5.函数重载6.引用7.内联函数8.auto关键字&#xff0c;基于范围的for循环&#xff0c;空指针NULL8.1 auto8.2 基于范围的for循环8.3 nullptr 1.hello world #include <iostream> us…

diffusion入门

1. diffusion model 概念 https://zhuanlan.zhihu.com/p/638442430 这篇博客写得很好&#xff0c;顺便做一点笔记记录一下。 原博客附带的代码也很清晰易懂。 1.1 前向过程 后一个过程等于前一个结果的均值乘上sqrt(1-beta_t), 再加上方差beta_t的噪声。 这样下去可以得到 x…

EasyCVR视频融合平台铁路抑尘喷洒监控系统视频搭建方案

一、建设背景与需求分析 随着我国铁路建设的迅猛发展&#xff0c;铁路抑尘喷洒设备质量监控系统在技术和管理方面都取得了显著的进步&#xff0c;面临安全压力也随之加大。为了确保铁路运输的安全和稳定&#xff0c;车站监控室、喷洒区域、操作间以及安全防护区域等关键区域都…

08章【文件与IO】

文章目录 File类IO流字节流字符流字节字符转换流缓冲流打印流对象流字节数组流数据流字符串流、管道流、合并流 RandomAccessFileProperties文件操作文件压缩与解压缩装饰者模式常见字符编码New IO File类 File类的基本概念 File类&#xff1a;表示文件和目录路径名的抽象表示…

低功耗设计之Retention cell

SoC芯片在需要休眠时候&#xff0c;可以关掉CPU总线等高速逻辑来降低功耗&#xff0c;但是重新上电唤醒又太慢怎么办&#xff1f;我们可以用retention cell来保存CPU的堆栈等关键寄存器数据&#xff0c;既满足了上电唤醒速度快的需求&#xff0c;也满足了掉电省功耗的要求。景芯…

MODNet 剪枝再思考: 优化计算量的实验历程分享

目录 1 写在前面 2 模型分析 3 遇到问题 4 探索实验一 4.1 第一部分 4.2 第二部分 Error 1 Error 2 4.3 实验结果 ①参数量与计算量 ②模型大小 ③推理时延 5 探索实验二 5.1 LR Branch 5.2 HR Branch 5.2.1 初步分析 5.2.2 第一部分 enc2x 5.2.3 第二部分 en…

【前端web入门第一天】01 开发环境、HTML基本语法文本标签

文章目录: 1. 准备开发环境 1.1 vs Code基本使用 2.HTML文本标签 2.1 标签语法2.2 HTML基本骨架2.3 标签的关系2.4 注释2.5 标题标签2.6 段落标签2.7 换行与水平线标签2.8 文本格式化标签 1. 准备开发环境 VSCode与谷歌浏览器离线版,安装包评论区自提. VSCode默认安装位置:C…

硬件之相机选型

1. 相机成像原理 相机成像原理如图所示&#xff1a; 注&#xff1a; 当物距为无穷远时&#xff0c;像距等于焦距&#xff0c;成像在焦平面上&#xff1b;当物距为无穷无与两倍焦距之间时&#xff0c;像距在焦距与两倍焦距之间&#xff0c;成缩小的实像&#xff1b;当物距等于两…

前端项目打包使用nginx本地服务器运行

1.下载安装nginx nginx: 下载nginx 中文网提供nginx中文文档nginx下载等内容https://nginx.p2hp.com/en/download.html 稳定版就可以&#xff0c;下载完后将下载的压缩包解压 2.修改配置文件 主要修改端口&#xff0c;以及项目所在文件夹&#xff0c;直接放html下就行 server …

基于Java SSM框架实现在线教育资源管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架在线教育资源管理系统演示 摘要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线教育资源管理系统&#xff0c;主要的模块包括管理员&#xff1b;个人中心、学生管理、教师管…