【Web APIs】DOM节点

news2024/9/23 20:08:23

目录

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元素)

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

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

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

相关文章

计算机网络:物理层中的数字传输系统全景概览解析

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

windows一键快速安装python方法

正常我们安装python的时候&#xff0c;需要先去下载python压缩包&#xff0c;然后再一步步安装&#xff0c;今天发现一个windows10下&#xff0c;一键安装python的方法&#xff1b; 电脑环境&#xff1a;windows10以上 安装方法&#xff1a; 0&#xff1a;在应用商店搜索pyt…

nodejs+vue反诈科普平台的设计与实现pythonflask-django-php

相比于以前的传统手工管理方式&#xff0c;智能化的管理方式可以大幅降低反诈科普平台的运营人员成本&#xff0c;实现了反诈科普平台的标准化、制度化、程序化的管理&#xff0c;有效地防止了反诈科普平台的随意管理&#xff0c;提高了信息的处理速度和精确度&#xff0c;能够…

flask_Restful数据解析参数设置

add_argument 方法参数详解 add_argument方法可以指定这个字段的名字&#xff0c;这个字段的数据类 型等&#xff0c;验证错误提示信息等&#xff0c;具体如下&#xff1a; default&#xff1a;默认值&#xff0c;如果这个参数没有值&#xff0c;那么将使用这个参数 指定的默认…

防外破警示灯:高压线“守护神”,照亮安全之路

近年来&#xff0c;随着城市施工建设项目不断增多&#xff0c;大型施工机械在输电通道内活动越来越频繁&#xff0c;线路外破隐患点大幅增多。一旦施工机械在作业过程中碰触到高压线&#xff0c;将会造成线路外破事故&#xff0c;严重威胁输电线路和施工人员的安全。 哪些境况下…

STM32之HAL开发——HAL库框架介绍

HAL库外设设计思想 HAL库借鉴面向对象的设计思想&#xff0c;将外设驱动封装为对象。 HAL库使用主线 HAL使用的主要用在俩个地方&#xff0c;无外乎外设初始化以及外设的使用。想用好这两个功能&#xff0c;我们首先得对外设的封装有一定的了解。 句柄结构体 xx_HandleTypeDef…

二. CUDA编程入门-使用CUDA进行矩阵乘法的加速

目录 前言0. 简述1. 初步计算 MatMul1.1 执行一下我们的第三个CUDA程序1.2 host端与device端的数据传输1.3 CUDA Core的矩阵乘法计算1.4 代码分析 2. CUDA中的error handler2.1 为什么需要有error handler 3. 获取GPU信息3.1 执行一下我们的第五个CUDA程序3.2 为什么要注意硬件…

3月23日笔记

广播域与泛洪范围是相同的 广播&#xff1a;在同一个泛洪范围内&#xff0c;强迫交换机泛洪&#xff08;主动&#xff09; 泛洪&#xff08;被动&#xff09; ARP的工作原理&#xff1a;ARP先通过广播发送请求包&#xff0c;所有收到该广播包的设备都会将其中的源IP和源MAC相…

Node.js新手必备:超实用命令行入门教程

1.安装Node.js和npm 首先&#xff0c;我们需要下载并安装Node.js&#xff0c;它自带了npm&#xff08;Node Package Manager&#xff09;。安装完成后&#xff0c;在命令行输入&#xff1a; node -v npm -v 这两个命令分别显示已安装的Node.js和npm版本&#xff0c;确认安装成…

LeetCode 热题 HOT 100(P21~P30)

系列文章&#xff1a; LeetCode 热题 HOT 100(P1~P10)-CSDN博客 LeetCode 热题 HOT 100(P11~P20)-CSDN博客 LeetCode 热题 HOT 100(P21~P30)-CSDN博客 LC48rotate_image . - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给定一个 n n 的二维矩阵 matrix 表…

【电路笔记】-场效应管(FET)电流源

场效应管(FET)电流源 文章目录 场效应管(FET)电流源1、概述2、偏置结 FET2.1 N沟道JFET偏置2.2 N沟道JFET输出特性3、JFET 作为恒流源4、JFET 零电压偏置5、JFET 负电压偏置6、FET 恒流源示例17、JFET电流源8、FET 恒流源示例29、FET 恒流源示例310、总结FET 恒流源使用 JFET 和…

SpringBoot3集成PostgreSQL

标签&#xff1a;PostgreSQL.Druid.Mybatis.Plus&#xff1b; 一、简介 PostgreSQL是一个功能强大的开源数据库系统&#xff0c;具有可靠性、稳定性、数据一致性等特点&#xff0c;且可以运行在所有主流操作系统上&#xff0c;包括Linux、Unix、Windows等。 通过官方文档可以…

学习刷题-13

3.23 hw机试【二叉树】 剑指offer32 剑指 offer32&#xff08;一、二、三&#xff09;_剑指offer 32-CSDN博客 从上到下打印二叉树I 一棵圣诞树记作根节点为 root 的二叉树&#xff0c;节点值为该位置装饰彩灯的颜色编号。请按照从 左 到 右 的顺序返回每一层彩灯编号。 输…

WiFi已连接却不可上网是什么原因?

很多使用wifi上网的用户都遇到过这样的问题,就是电脑已经连接了wifi,但就是上不了网。着到底是怎么回事呢?今天,极客狗带大家一起来找找WiFi已连接却不可上网是什么原因,并给出对应的解决方。 原因分析: 可能是ip地址冲突所导致,也有可能是宽带出先故障,不妨试试下面的…

OpenHarmony使用智能指针管理动态分配内存对象

概述 智能指针是行为类似指针的类&#xff0c;在模拟指针功能的同时提供增强特性&#xff0c;如针对具有动态分配内存对象的自动内存管理等。 自动内存管理主要是指对超出生命周期的对象正确并自动地释放其内存空间&#xff0c;以避免出现内存泄漏等相关内存问题。智能指针对…

装修行业万能DIY小程序源码系统 带完整的安装的代码包以及搭建教程

在如今数字化、智能化的时代背景下&#xff0c;装修行业也迎来了前所未有的发展机遇。为了满足广大装修从业者及业主的需求&#xff0c;罗峰给大分享了这款装修行业万能DIY小程序源码系统。该系统不仅提供了完整的安装代码包&#xff0c;还附带了详细的搭建教程&#xff0c;让用…

零基础入门数据挖掘系列之「特征工程」

摘要&#xff1a;对于数据挖掘项目&#xff0c;本文将学习应该从哪些角度做特征工程&#xff1f;从哪些角度做数据清洗&#xff0c;如何对特征进行增删&#xff0c;如何使用PCA降维技术等。 特征工程&#xff08;Feature Engineering&#xff09;对特征进行进一步分析&#xf…

详解机器学习概念、算法

目录 前言 一、常见的机器学习算法 二、监督学习和非监督学习 三、常见的机器学习概念解释 四、深度学习与机器学习的区别 基于Python 和 TensorFlow 深度学习框架实现简单的多层感知机&#xff08;MLP&#xff09;神经网络的示例代码&#xff1a; 欢迎三连哦&#xff01; 前言…

美团2024届秋招笔试第二场编程真题

要么是以0开头 要么以1开头 选择最小的答案累加 import java.util.Scanner; import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和…

批量高效剪辑视频,轻松调整视频时长,轻松打造完美节奏

在数字化时代&#xff0c;视频内容已成为我们生活中不可或缺的一部分。无论是社交媒体上的短视频&#xff0c;还是专业影视制作中的长片&#xff0c;视频剪辑都扮演着至关重要的角色。然而&#xff0c;面对大量视频素材&#xff0c;如何高效地进行剪辑调整&#xff0c;让每一帧…