【Web APIs】DOM节点

目录

1.节点操作

1.1DOM节点

1.2查找节点

1.2.1父节点查找

1.2.2子节点查找

1.2.3兄弟节点查找

1.3增加节点

1.4克隆节点

1.5删除节点

2.时间对象

2.1实例化

2.2时间对象方法

2.3时间戳

3.重绘和回流


1.节点操作

1.1DOM节点

DOM节点:DOM树中的每一个内容都称为节点

节点类型:

1️⃣元素节点:

  • 所有的标签:如body,div
  • html是根节点

2️⃣属性节点:

  • 所有的属性,如src,href

3️⃣文本节点:

  • 所有的文本

1.2查找节点

节点关系:

  1. 父节点
  2. 子节点
  3. 兄弟节点

1.2.1父节点查找

parentNode属性

语法:子元素.parentNode

作用:返回最近一级的父节点,找不到返回null

1.2.2子节点查找

语法:父元素.children

  • childNodes:获得所有子节点,包括文本节点(空格,换行),注释节点
  • children:仅获得所有元素节点,返回一个伪数组

1.2.3兄弟节点查找

下一个兄弟节点:nextElementSibling属性

上一个兄弟节点:previousElementSibling属性

1.3增加节点

增加节点步骤:

  1. 创建一个新节点
  2. 把创建的新节点放入到指定元素内部

①创建节点

  • 语法:document.createElement('标签名')

②追加节点

要想在页面看到,还得插入到某个父元素中

  • 插入到父元素的最后一个子元素:父元素.appendChild(要插入的元素)
  • 插入到父元素中某个子元素的前面:父元素.insertBefore(要插入的元素,在哪个元素的前面)

1.4克隆节点

语法:元素.cloneNode(布尔值)

作用:cloneNode会克隆出一个跟原标签一样的元素,括号内传入布尔值

  • 若为true,则代表克隆时会包含后代节点一起克隆
  • 若为false,则代表克隆时不包含后代节点(默认为false)

1.5删除节点

在JavaScript原生DOM操作中,要删除元素必须通过父元素删除

语法:父元素.removeChild(要删除的元素)

📖Note:

  • 如果不存在父子关系则删除不成功
  • 删除节点和隐藏节点区别:隐藏节点还是存在的,删除之后节点就不存在了

2.时间对象

时间对象Date:用来表示时间的对象,可以得到当前系统时间

2.1实例化

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

创建一个时间对象并获取时间

获得指定时间

2.2时间对象方法

时间对象返回的数据我们不能直接使用,需要转换成实际开发中常用的格式

方法作用说明
getFullYear()获得年份获取四位年份
getMonth()获得月份取值为0~11
getDate()获得月份中的某一天不同月份的取值不同
getDay()获取星期取值为0~6
getHours()获取小时取值为0~23
getMinutes()获取分钟取值为0~59
getSeconds()获取秒取值为0~59

2.3时间戳

时间戳:从1970年1月1日(UTC/GMT的午夜)开始所经过的毫秒数,不考虑闰秒

倒计时核心思想:

将来某个时间的时间戳 - 现在时间的时间戳 = 毫秒数 ===> 转换成时分秒

案例:倒计时

<!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>
  <style>
    .countdown {
      width: 240px;
      height: 305px;
      text-align: center;
      line-height: 1;
      color: #fff;
      background-color: brown;
      overflow: hidden;
    }

    .countdown .tips {
      font-size: 16px;
      margin: 25px 0 14px;
    }

    .countdown .title {
      font-size: 33px;
    }

    .countdown .over {
      margin-top: 80px;
      font-size: 23px;
    }

    .countdown small {
      font-size: 17px;
    }

    .countdown .clock {
      width: 142px;
      margin: 18px auto 0;
      overflow: hidden;
    }

    .countdown .clock span,
    .countdown .clock i {
      display: block;
      text-align: center;
      line-height: 34px;
      font-size: 23px;
      float: left;
    }

    .countdown .clock span {
      width: 34px;
      height: 34px;
      border-radius: 2px;
      background-color: #303430;
    }

    .countdown .clock i {
      width: 20px;
      font-style: normal;
    }

    .countdown .now i {
      font-style: normal;
    }
  </style>
</head>

<body>
  <div class="countdown">
    <!-- 顶部日期提示 -->
    <p class="tips"></p>
    <p class="title">下班倒计时</p>
    <p class="clock">
      <span id="hour">00</span>
      <i>:</i>
      <span id="minute">00</span>
      <i>:</i>
      <span id="second">00</span>
    </p>
    <!-- 下班时间 -->
    <p class="over">下班时间是18:00:00</p>
  </div>

  <script>
    // 顶部日期提示
    let date = new Date()
    let year = date.getFullYear()
    let month = date.getMonth() + 1
    let day = date.getDate()

    let tip = document.querySelector('.tips')
    tip.innerHTML = `今天是${year}年${month}月${day}日`

    // 获取元素
    let hour = document.querySelector('#hour')
    let minute = document.querySelector('#minute')
    let second = document.querySelector('#second')
    
    time()
    setInterval(time, 1000)
  
    function time() {
      // 获得现在的时间戳
      let now = +new Date()
      // 得到指定时间的时间戳
      let last = +new Date('2024-3-24 18:00:00')
      // 计算时间戳之差 
      let count = (last - now) / 1000

      // 转换为时分秒
      // h = parseInt(总秒数 / 60 / 60 % 24)
      // m = parseInt(总秒数 / 60 % 60)
      // s = parseInt(总秒数 % 60)

      let h = parseInt(count / 60 / 60 % 24)
      // h补0
      h = h < 10 ? '0' + h : h
      let m = parseInt(count / 60 % 60)
      m = m < 10 ? '0' + m : m
      let s = parseInt(count % 60)
      s = s < 10 ? '0' + s : s

      // console.log(h, m, s)

      //修改内容
      hour.innerText = h
      minute.innerHTML = m
      second.innerHTML = s

    }

  </script>

</body>

</html>

3.重绘和回流

浏览器是如何进行界面渲染的

  1. 解析(Parser)HTML,生成DOM树(DOM Tree)
  2. 同时解析(Parser)CSS,生成样式规则(Style Rules)
  3. 根据DOM树和样式规则,生成渲染树(Render Tree)
  4. 进行布局Layout(回流/重排):根据生成的渲染树,得到节点的几何信息(位置,大小)
  5. 进行绘制Painting(重绘):根据计算和获取的信息进行整个页面的绘制
  6. Display:展示在页面上

重绘和回流:

①回流(重排):当Render Tree中部分或者全部元素的尺寸,结构,布局等发生改变时,浏览器就会重新渲染部分或者全部文档的过程

②重绘:由于节点(元素)的样式改变并不影响它在文档流中的位置和文档布局时(比如color,background-color,outline等),称为重绘

📖Note:

  • 重绘不一定引起回流,而回流一定会引起重绘

会导致回流的操作:

  • 页面的首次刷新
  • 浏览器的窗口大小发生改变
  • 元素的大小或位置发生改变
  • 改变字体的大小
  • 内容的变化(input框的输入,图片的大小等)
  • 激活CSS伪类(hover等)
  • 脚本操作DOM(添加或删除可见的DOM元素)

简单来说:影响到布局了,就会引起回流

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BaseDao封装增删改查

文章目录 什么是BaseDao操作代码增删改查询单个数据查询多个数据 总结 什么是BaseDao BaseDao是&#xff1a; 数据库里负责增加&#xff0c;删除&#xff0c;修改&#xff0c;查询 具体来说是一种接口代码,公共方法的接口类。 在dao层新建basedao,其他dao层接口继承basedao 相…

《VulnHub》Lampião:1

title: 《VulnHub》Lampio&#xff1a;1 date: 2024-03-28 21:37:49 updated: 2024-03-28 21:37:50 categories: WriteUp&#xff1a;Cyber-Range excerpt: 关键技术&#xff1a;主机发现&#xff0c;端口扫描、服务探测、操作系统探测&#xff0c;对开放的端口探测漏洞&#x…

正弦实时数据库(SinRTDB)的使用(5)-历史数据查询

前文已经将正弦实时数据库的使用进行了介绍&#xff0c;需要了解的可以先看下面的博客&#xff1a; 正弦实时数据库(SinRTDB)的安装 正弦实时数据库(SinRTDB)的使用(1)-使用数据发生器写入数据 正弦实时数据库(SinRTDB)的使用(2)-接入OPC DA的数据 正弦实时数据库(SinRTDB)…

民航电子数据库:查询cae服务存在哪些数据库以及删除数据库

目录 一、场景二、查询数据库列表三、删除数据库 一、场景 1、对接民航电子数据库 2、在CAEManage是没有直观展示已存在的数据库的&#xff0c;只能通过SQL查询 3、在CAEManage没有操作按钮可以删除数据库&#xff0c;只能通过SQL进行删除 二、查询数据库列表 1、登录SYSTE…

我是如何在学术界占有一席之地的——专注于我的写作

罗伯特纽贝克 “作为一个移民&#xff0c;你是怎么发表这么多文章的&#xff1f;”意识到我不是以英语为母语的人&#xff0c;当我去年面试教职时&#xff0c;人们无数次问过这个问题。我知道披露我的挣扎不太可能让我找到工作&#xff0c;所以我会笑着说&#xff1a;“我喜欢…

Xinstall广告效果监测,为您的App推广保驾护航

在当前的移动互联网时代&#xff0c;App已经成为企业与用户连接的重要桥梁。然而&#xff0c;App推广过程中&#xff0c;如何准确衡量广告效果、洞悉推广效果以及优化用户体验&#xff0c;一直是广告主和开发者面临的挑战。这时&#xff0c;一款强大而专业的App全渠道统计服务商…

蓝桥杯刷题第四天

思路&#xff1a; 这道题很容易即可发现就是简单的暴力即可完成题目&#xff0c;我们只需满足所有数的和为偶数即可保证有满足条件的分法&#xff0c;同时也不需要存下每个输入的数据&#xff0c;只需要知道他是偶数还是奇数即可&#xff0c;因为我们只需要偶数个奇数搭配在一块…

Manjaro 安装全新 Linux 版微信,从此告别 Wine

目前已经基本上使用 Manjaro 来工作&#xff0c;而工作离不开微信作为日常的工作沟通工具。因为微信官方一直没有 Linux 版本的&#xff0c;所以之前都只能够使用 Wine 版本&#xff0c;然后踩了不少坑&#xff0c;但还算能勉强使用。 最近听说微信终于要发布 Linux 版本的&am…

day22.二叉树part08

day22.二叉树part08 235.二叉搜索树的最近公共祖先 原题链接 代码随想录链接 思路&#xff1a;因为本题是二叉搜索树&#xff0c;利用它的特性可以从上往下进行递归遍历树&#xff0c;这里需要理解一点就是如果遍历到的一个节点发现该节点的值正好位于节点p和节点q的值中间…

ip地址改变导致nacos无法登录的解决方法

ip地址改变导致nacos无法登录的解决方法 在做黑马的springcloud课程里的黑马商城微服务项目时&#xff0c;发现使用nacos的默认账号密码&#xff08;nacos&#xff0c;nacos&#xff09;无法登录&#xff0c;项目里也没报错信息&#xff0c;虽然猜测和ip地址改变有关&#xff0…

视频素材免费无水印软件有哪些?视频素材免费下载素材库

在这个视觉为王的时代&#xff0c;一段精彩的视频能够跨越语言和文化的障碍&#xff0c;触动每一个心灵。对于每一位热血沸腾的视频创作者而言&#xff0c;寻找那些高质量无水印的素材&#xff0c;就像是在无尽的创意海洋中航行&#xff0c;在这段旅程中&#xff0c;我为你精选…

银行监管报送系统介绍(八):银行业大额交易和可疑交易报告数据报送

依据《金融机构大额交易和可疑交易报告管理办法》&#xff1a; 第五条 金融机构应当报告下列大额交易&#xff1a; &#xff08;一&#xff09;当日单笔或者累计交易人民币5万元以上&#xff08;含5万元&#xff09;、外币等值1万美元以上&#xff08;含1万美元&#xff09;的…

尾盘拉升超8个点,速腾聚创交出来一份怎样的超预期答卷?

“如果说2024年是智驾加速渗透&#xff0c;L3级智能驾驶陆续落地的一年&#xff0c;那么激光雷达将是这股潮流中不可缺失的那一份。” 2024年开年&#xff0c;速腾聚创以相当“闪亮的姿态”成为“港股2024年首只IPO上市成功”的企业。 然而&#xff0c;其上市之后的市场表现却…

Unity 渲染

渲染的三个阶段 1&#xff1a;应用阶段 1.1 数据的准备 遮挡剔除&#xff0c;层级剔除。 渲染顺序&#xff0c;UI在Herachy窗口按照层级渲染&#xff0c;其余物体由大概按照先近后远。 打包渲染数据发送给显存&#xff0c;主要包括有模型信息&#xff0c;变换矩阵&#xff0c…

《VideoMamba》论文笔记

原文链接&#xff1a; [2403.06977] VideoMamba: State Space Model for Efficient Video Understanding (arxiv.org) 原文笔记 What&#xff1a; VideoMamba: State Space Model for Efficient Video Understanding 作者探究Mamba模型能否用于VideoUnderStanding作者引入…

若依ruoyi-vue实现excel导入导出

文章目录 Excel注解excel数据导入前端实现后端实现 下载模板前端实现后端实现 excel数据导出前端实现后端实现 自定义标题信息导出用户管理表格新增标题&#xff08;用户列表&#xff09;导入表格包含标题处理方式 自定义数据处理器自定义隐藏属性列导入对象的子对象导出对象的…

6、父子组件传参、路由的嵌套、命名视图、路由跳转传参

一、父子组件传参 1、父传子 在父组件的子组件中自定义一个属性在子组件中有一个props属性&#xff0c;用来接收父组件传递的数据,传递的数据不能修改,还可以设置默认值 <!-- 父组件 -->data() {return {flag: false,num:10, //传的参数free:}} <!-- :type1"…

【论文通读】UFO:A UI-Focused Agent for Windows OS Interaction

UFO&#xff1a;A UI-Focused Agent for Windows OS Interaction 前言AbstractMotivationMethodsExperimentConclusion 前言 Windows客户端第一个JARVIS&#xff0c;利用GPT4 Vision识别截图信息辅助智能体自动化执行操作&#xff0c;作为微软大肆宣传的一篇工作&#xff0c;其…

头歌 实验二 Java类编程实验

头歌 实验二 Java类编程实验 制作不易&#xff0c;点个关注&#xff01;给大家带来更多的价值&#xff01; 目录 头歌 实验二 Java类编程实验制作不易&#xff0c;点个关注&#xff01;给大家带来更多的价值&#xff01;第一关&#xff1a; 编写一个代表三角形的类第二关&…

【干货分享】OpenHarmony轻量系统适配方案

1. 简介 本文在不改变原有系统基础框架的基础上&#xff0c; 介绍了一种OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;轻量系统适配方案。 本方案使用的是 OpenHarmony v3.2 Release版本源码。 2. 方案设计 本文使用的硬件模块的主要特性及功能如…