Web APIs - DOM节点操作

news2024/12/26 22:05:16

Web APIs - DOM节点操作

第9天
目标: 了解DOM节点的增删改查,掌握利用数据操作页面,完成移动端通讯录案例

  • 日期对象
  • 节点操作
  • M端事件
  • JS插件
  • 综合案例

1、日期对象

日期对象:用来表示日期和时间的对象

作用:可以得到当前系统日期和时间

Date是JavaScript内置对象

日期对象使用必须先实例化:创建一个日期对象并获取时间

在代码中发现了 new 关键字时,一般将这个操作称为实例化

1.1 实例化

<body>
  <script>
    // 1. 实例化日期对象
    // 1.1 得到当前的日期和时间
    const date = new Date()
    console.log(date)

    // 1.2 得到指定的日期和时间
    const date1 = new Date('2099-12-12 08:08:08')
    console.log(date1)
  </script>
</body>

1.2 格式化日期对象

方法作用说明
getFullYear()获得年份获取四位年份
getMonth()获得月份取值为 0 ~ 11
getDate()获取月份中的每一天不同月份取值也不相同
getDay()获取星期取值为 0 ~ 6
getHours()获取小时取值为 0 ~ 23
getMinutes()获取分钟取值为 0 ~ 59
getSeconds()获取秒取值为 0 ~ 59
<body>
 <script>
   // 2. 格式化日期对象-转换成开发中常见的日期和时间格式
   const myDate = new Date()
   console.log(myDate.getFullYear()) // 得到年份 数字型的 2023
   console.log(myDate.getMonth() + 1) // 得到月份 数字型的 0 需要加1
   console.log(myDate.getDate()) // 得到几号 数字型的 27 
   console.log(myDate.getDay()) // 得到星期  数字型 5 
   console.log(myDate.getHours()) // 得到小时
   console.log(myDate.getMinutes()) // 得到分钟
   console.log(myDate.getSeconds()) // 得到秒数
   console.log(`现在的日期是:${myDate.getFullYear()}${myDate.getMonth() + 1}${myDate.getDate()}`)

 </script>
</body>

1.3 格式化日期对象另外方法

方法作用说明
toLocaleString()返回该日期对象的字符串(包含日期和时间)2099/9/20 18:30:43
toLocaleDateString()返回日期对象日期部分的字符串2099/9/20
toLocaleTimeString()返回日期对象时间部分的字符串18:30:43
<body>
  <div class="box"></div>
  <script>

    const date = new Date()
    console.log(date.toLocaleString())  // 2023/1/27 23:19:20
    console.log(date.toLocaleDateString())  // 2023/1/27 
    console.log(date.toLocaleTimeString())  // 23:19:20

    // 1. 封装一个 getDateTime函数,里面格式化时间对象
    function getDateTime() {
      const date = new Date()

      return date.toLocaleString()
    }
    // 注意: 先写上这句话,防止盒子有1秒的空白期
    document.querySelector('.box').innerText = getDateTime()
    // 3. 显示到box盒子里面,并且添加定时器
    setInterval(function () {
      document.querySelector('.box').innerText = getDateTime()
    }, 1000)
  </script>
</body>

1.4 时间戳

什么是时间戳:

  • 是指1970年01月01日00时00分00秒起至现在的总毫秒数(数字型),它是一种特殊的计量时间的方式

使用场景: 计算倒计时效果,需要借助于时间戳完成

算法:

  • 将来的时间戳 - 现在的时间戳 = 剩余时间毫秒数
  • 剩余时间毫秒数转换为年月日时分秒就是倒计时时间
    // 1. 实例化
  const date = new Date()
  // 2. 获取时间戳
  console.log(date.getTime())
// 还有一种获取时间戳的方法
  console.log(+new Date())
  // 还有一种获取时间戳的方法
  console.log(Date.now())

获取时间戳的方法,分别为 getTime 和 Date.now 和 +new Date()

2、 节点操作

2.1 DOM节点

DOM树: DOM 将 HTML文档以树状结构直观的表现出来,我们称之为 DOM 树 或者 节点树

节点(Node) 是DOM树(节点树)中的单个点。包括文档本身、元素、文本以及注释都属于是节点。

  • 元素节点(重点)
    • 所有的标签 比如 body、 div
    • html 是根节点
  • 属性节点
    • 所有的属性 比如 href
  • 文本节点
    • 所有的文本

在这里插入图片描述

2.2 查找节点

利用节点关系查找节点,返回的都是对象

  • 父节点
  • 子节点
  • 兄弟节点

有了查找节点可以使我们选择元素更加方便

2.2.1 父节点

语法:

元素.parentNode
<body>
  <div class="pop">
    <a href="javascript:;" class="close"></a>
  </div>
  <script>
    // 点击关闭按钮可以关闭父盒子
    const closeBtn = document.querySelector('.close')
    // 利用孩子选取父节点,返回的也是一个元素对象
    console.log(closeBtn.parentNode)
    closeBtn.addEventListener('click', function () {
      this.parentNode.style.display = 'none'
    })
  </script>
</body>
2.2.2 子节点

语法:

父元素.children
<body>
  <ul>
    <li>我是第1个孩子</li>
    <li>我是第2个孩子</li>
    <li>我是第3个孩子</li>
    <li>我是第4个孩子</li>
  </ul>
  <script>
    // 1. 查询子节点
    const ul = document.querySelector('ul')
    console.log(ul.children)

    // 2. 查询兄弟节点
    const li2 = document.querySelector('ul li:nth-child(2)')
    // console.log(li2)
    console.log(ul.children[0]) // 第一个孩子
    console.log(ul.children[2]) // 第三个孩子
  </script>
</body>
2.2.3 兄弟节点

语法:

上一个兄弟:元素.previousElementSibling

下一个兄弟:元素.nextElementSibling
<body>
  <ul>
    <li>我是第1个孩子</li>
    <li>我是第2个孩子</li>
    <li>我是第3个孩子</li>
    <li>我是第4个孩子</li>
  </ul>
  <script>
    // 2. 查询兄弟节点
    const li2 = document.querySelector('ul li:nth-child(2)')
    // console.log(li2)
    console.log(li2.previousElementSibling) // 上一个兄弟
    console.log(li2.nextElementSibling)  // 下一个兄弟
    console.log(ul.children[0]) // 第一个孩子
    console.log(ul.children[2]) // 第三个孩子
  </script>
</body>

2.2 增加节点

很多情况下,我们需要在页面中增加元素

  • 比如,点击发布按钮,可以新增一条信息

一般情况下,我们新增节点,按照如下操作:

  • 创建一个新的节点
  • 把创建的新的节点放入到指定的元素内部
2.3.1 创建节点

语法:

document.createElement()
2.3.2 追加节点
  1. 父元素最后一个子节点之后,插入节点元素

    element.append()
    
  2. 父元素第一个子元素的之前,插入节点元素

    element.prepend()
    

如下代码演示:

<body>
  <ul>
    <li>我是小li</li>
  </ul>
  <script>
    // 1. 创建节点
    const li = document.createElement('li')
    li.innerHTML = '我是放到后面的'
    console.log(li)

    // 2. 追加给父元素
    const ul = document.querySelector('ul')
    // 2.1 append 放到ul 的最后面 类似css的 after伪元素
    ul.append(li)
    // 2.2 prepend放到 ul 的最前面 类似css的 before伪元素
    const firstli = document.createElement('li')
    firstli.innerHTML = '我是放到前面的'
    ul.prepend(firstli)
  </script>
</body>

2.3 删除节点

若一个节点在页面中已不需要时,可以删除它

语法:

element.remove()
  1. 把对象从它所属的 DOM 树中删除
  2. 删除节点和隐藏节点(display:none) 有区别的: 隐藏节点还是存在的,但是删除,则从DOM树中删除
<!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>删除节点</title>
  </head>

  <body>
    <div class="remove">我要删除</div>
    <div class="none">我要隐藏</div>
    <script>
      // 1. 删除节点, remove 会从dom树中删除这个元素
      const remove = document.querySelector('.remove')
      remove.remove()

      // 2. display:none 隐藏元素,页面看不见,但是dom树中还存在这个标签
      const none = document.querySelector('.none')
      none.style.display = 'none'
    </script>
  </body>

</html>

3、M端事件

M端(移动端)有自己独特的地方。比如触屏事件 touch(也称触摸事件),Android 和 IOS都有。

touch 对象代表一个触摸点。触摸点可能是一根手指,也可能是一根触摸笔。触屏事件可响应用户手指(或触控笔)对屏幕或者触控板操作。

常见的触屏事件如下:

在这里插入图片描述

<body>
  <div class="box"></div>
  <script>
    // 触摸事件
    const box = document.querySelector('.box')
    // 1. 手指触屏开始事件 touchstart
    box.addEventListener('touchstart', function () {
      console.log('我开始摸了')
    })
    // 2. 手指触屏滑动事件 touchmove
    box.addEventListener('touchmove', function () {
      console.log('我一直摸')
    })

    // 3. 手指触屏结束事件  touchend
    box.addEventListener('touchend', function () {
      console.log('我摸完了')
    })
  </script>
</body>

4、JS插件

插件: 就是别人写好的一些代码,我们只需要复制对应的代码,就可以直接实现对应的效果

4.1 swiper-轮播图

学习插件的思路:

1.看官网。了解这个插件可以完成什么需求 https://www.swiper.com.cn/

2.查看基本使用流程 。 https://www.swiper.com.cn/usage/index.html

3.写个小demo。看在线演示,找到符合自己需求的demo https://www.swiper.com.cn/demo/index.html

4.应用的开发中。

小demo的实现步骤
  1. 下载相关js文件和css文件引入到html页面中
  2. 找到自己喜欢的轮播图 demo,新窗口中打开,然后复制相关css、html、js代码
  3. 填充自己的图

4.1 AlloyFinger

AlloyFinger 是腾讯 AlloyTeam 团队开源的超轻量级 Web 手势插件,为元素注册各种手势事件

github地址:https://github.com/AlloyTeam/AlloyFinger

使用步骤:

  1. 下载js库:http://alloyteam.github.io/AlloyFinger/alloy_finger.js
  2. 将AlloyFinger库引入当前文件:<scriptsrc=“alloy_finger.js”>

​ 或者使用在线地址:

  1. 配置

    new AlloyFinger(element, {  // element 是给哪个元素做滑动事件
      swipe: function (e) {
        // 滑动的时候要做的事情 e.direction 可以判断上下左右滑动 Left  Right 等
      }
    })
    

5、综合案例

通讯录(移动端)

5.1 遍历数组forEach

arr.forEach(function (element, index) { /* … */ })
  • element是数组元素
  • index是数组元素的索引号

5.2 字符串截取

字符串.substring(起始索引号, [结束索引号])

5.3 思想转变(相当重要)

案例,尽量减少dom操作,采取操作数据的形式,为了后期Vue做铺垫

增加和删除都是针对于数组的操作,然后根据数组数据渲染页面(数据驱动视图)

事件委托的两个重要作用:

  1. 减少了注册次数
  2. 给新增元素注册事件

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

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

相关文章

力扣139-单词拆分(Java详细题解)

题目链接&#xff1a;139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完背包&#xff0c;所以现在的题解都是以背包问题为基础再来写的。 如果大家不懂背包问题的话&#…

深度盘点:2024年企业最喜欢用的WMS仓库管理系统有哪些?

本文将列举国内外知名的仓库管理系统&#xff0c;从每个系统的适用范围、核心功能、特点来为大家解读。为企业选型提供参考&#xff01; WMS系统是Warehouse Management System&#xff08;仓库管理系统&#xff09;的简称&#xff0c;它是一个帮助企业和仓库管理者高效管理仓库…

NMOS与PMOS原理图

重点关注续流二极管方向和电流流向&#xff1a; NMOS应用&#xff1a; PMOS 应用&#xff1a;

BASM引领2024国家网络安全宣传周:智能守护,打造全方位业务与应用安全监测平台

在这个信息泛滥的时代&#xff0c;网络安全已不再是可有可无的选项。 随着技术的飞速发展&#xff0c;新型网络攻击层出不穷&#xff0c;数据泄露、恶意攻击频发&#xff0c;保护个人与企业的数字安全显得尤为重要。 2024年国家网络安全宣传周期间&#xff0c;通付盾给大家带…

Cortex-R52+的PE mode详解--Abort

目录 1.R52 AArch32通用寄存器描述 2.Abort模式是什么 3.实例详解 1.R52 AArch32通用寄存器描述 上篇文章我们阐述了关于R52异常如何定位&#xff0c;其中详细说明了发生异常后应该在什么模式下去观察寄存器。 今天就以Abort异常为例&#xff0c;详解下如何精准定位Abort异…

一文读懂网络安全等级保护

网络安全等级保护&#xff08;简称“等保”&#xff09;是我国为了保护信息安全而推出的一项制度&#xff0c;旨在通过对信息系统分等级实施安全保护&#xff0c;确保信息安全。它涵盖了信息和存储、传输、处理这些信息的信息系统&#xff0c;以及使用的信息安全产品。等级保护…

素数筛的一个易错点

前言&#xff1a;之前运用素数筛的时候都没注意&#xff0c;一个不是素数的数可能会被反复标记为1 题目地址 #include <bits/stdc.h> using namespace std; #define int long longconst int N (int)3e7 10; int a[N]; int n;signed main() {// 1// 2 2 // 3 3// 4 2cin…

从100G到400G:利用多模光纤升级数据中心网络

数据中心网络的持续发展 数据中心网络的持续发展涵盖了两个关键方面。首先&#xff0c;必须应对由机器学习和物联网等数据密集型应用所带来的带宽和流量需求的增长挑战&#xff0c;这些应用正在推动现有10G和40G链路的升级&#xff1b;其次&#xff0c;为了满足日益提升的可持…

ARP:IP到MAC地址转换

网络中的ARP协议&#xff0c;它是IP地址到MAC地址转换的关键。通过ARP请求&#xff08;Req&#xff09;和响应&#xff08;Rsp&#xff09;&#xff0c;设备能够找到对应IP的物理地址&#xff0c;从而实现网络通信。 ARP req&#xff1a;广播 主机1mac:02:c2:c2:52:e5:e1 主机…

使用 Elastic 和 LM Studio 的 Herding Llama 3.1

作者&#xff1a;来自 Elastic Charles Davison, Julian Khalifa 最新的 LM Studio 0.3 更新使 Elastic 的安全 AI Assistant 能够更轻松、更快速地与 LM Studio 托管模型一起运行。在这篇博客中&#xff0c;Elastic 和 LM Studio 团队将向你展示如何在几分钟内开始使用。如果你…

顺风车 萝卜快跑!做人,什么是格局,什么是境界?——早读(逆天打工人爬取热门微信文章解读)

萝卜快跑&#xff01; 引言Python 代码第一篇 洞见 做人&#xff0c;什么是格局&#xff0c;什么是境界&#xff1f;第二篇 股市风云结尾 &#xff08;哈哈 订单已取消&#xff09; 引言 今天难受 把昨天买的票加入黑名单 太差了 早上一来低开4个多点 把我昨天的利润全没了 然…

微生物分类检测系统源码分享

微生物分类检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

代理服务器及其原理

代理服务器的代理可以分为正向代理和反向代理&#xff0c;本篇将讲解这两种代理方式的原理&#xff0c;以及对应的功能特点和应用场景。最后还对比和 NAT 和代理服务器的区别。 目录 正向代理 工作原理 功能特点 应用场景 反向代理 基本原理 应用场景 NAT和代理服务器…

mybatis-plu分页出现问题

还真能遇到版本导致的问题&#xff1a; mybatis-plus.使用分页插件出现count(),缺少* 查看你mybtis-plus的版本&#xff0c;将3.4.2换掉

Docker日志管理之Filebeat+ELK日志管理

所需安装包及镜像 安装步骤 把所需镜像导入到Docker容器 打开/etc/sysctl.conf配置文件&#xff0c;添加参数 打开资源限制配置文件&#xff0c;添加参数 创建一个网络 在根目录下创建一个项目目录 创建Elasticsearch子目录 在项目目录下创建Elasticsearch子目录 将安装Elast…

如何构建适合企业需求的即时通讯与音视频通话私有化平台?

在数字化转型的浪潮中&#xff0c;企业对于内部沟通的需求日益复杂化和多元化。传统的沟通方式已难以满足高效协作、信息安全及个性化定制的需求。因此&#xff0c;“即时通讯音视频通话”集成的私有化部署软件应运而生&#xff0c;成为企业优化内部沟通、提升工作效率的得力助…

如何在Linux虚拟机上安装和配置JDK

1. 下载jdk 首先&#xff0c;访问Oracle官方网站下载JDK安装包。这里以JDK 8为例&#xff1a; 1. 访问 Oracle JDK 下载页面。 Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads/ 2. 选择合适的版本&#xff08;如JDK 8&#xff09;并下载适用于L…

VS code 写下 print 时让编译器自动添加括号

VS code 当写下 print 时让编译器自动添加括号 引言正文 引言 最近本人由于某些原因开始使用 VS code 编译器了&#xff0c;相较于 PyCharm 编译器&#xff0c;VS code 速度非常快&#xff0c;且占用空间少&#xff0c;extension 也很多&#xff0c;用户可以根据自己的喜好进行…

知识|智能网联汽车多域电子电气架构会如何发展?

摘要&#xff1a;随着汽车智能化和网联化技术的快速发展&#xff0c;传统的电子电气架构已经无法满足未来车路云网一体化发展的新需求。本文聚焦于未来智能网联汽车的多域电子电气架构&#xff0c;并从总体设计、硬件系统、通信系统和软件系统四个方面对现有技术进行了详细的综…

二叉树c++(level up)

目录 1.搜索二叉树 1.1概念 1.2操作 1.2.1.查找 1.2.2插入 1.2.3遍历 1.2.4删除&#xff08;重点&#xff09; 1.3K模型/KV模型 1.4性能分析 2.二叉树oj 1.创建字符串 2.层序遍历 3.二叉树的最近公共祖先 4.二叉搜索树与双向链表 5.前序中序构建二叉树 6.中序后续…