Web APIs知识点讲解(阶段三)

DOM- 节点操作

一.节点操作

1.DOM节点

目标:能说出DOM节点的类型

  1. DOM节点

             DOM树里每一个内容都称之为节点

  1. 节点类型
  • 元素节点

           所有的标签 比如 body、 div

           html 是根节点

  • 属性节点

           所有的属性 比如 href

  • 文本节点

           所有的文本

document树:

总结:

1. 什么是DOM 节点?

 DOM树里每一个内容都称之为节点

2. DOM节点的分类?

 元素节点 比如 div标签

 属性节点 比如 class属性

 文本节点 比如标签里面的文字

3. 我们重点记住那个节点?

 元素节点

 可以更好的让我们理清标签元素之间的关系

2.查找节点

目标:能够具备根据节点关系查找目标节点的能力

  1. 关闭二维码案例:

          点击关闭按钮, 关闭的是二维码的盒子, 还要获取erweima盒子

  1. 思考:
  • 关闭按钮 和 erweima 是什么关系呢?
  • 父子关系
  • 所以,我们完全可以这样做:
  • 点击关闭按钮, 直接关闭它的爸爸,就无需获取erweima元素了
  1. 节点关系:
  • 父节点
  • 子节点
  • 兄弟节点
  1. 父节点查找:
  • parentNode 属性

  • 返回最近一级的父节点 找不到返回为null

 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div class="father"><div class="son">儿子</div></div><script>let son = document.querySelector('.son')//  找爸爸//console.log(son.parentNode)//此项运行时会返回Null,被隐藏了//son.parentNode.style.display = 'none'</script>
</body>
</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><style>* {margin: 0;padding: 0;}.erweima {position: relative;width: 160px;height: 160px;margin: 100px auto;border: 1px solid #ccc;}.erweima i {position: absolute;left: -13px;top: 0;width: 10px;height: 10px;border: 1px solid #ccc;font-size: 12px;line-height: 10px;color: #ccc;font-style: normal;cursor: pointer;}</style>
</head><body><div class="erweima"><img src="./images/code.png" alt=""><i class="close_btn">x</i></div><script>//1.获取元素 事件源i 关闭的二维码erweimalet close_btn = document.querySelector('.close_btn')//2.事件监听close_btn .addEventListener('click',function(){//找他爸,this指的就是close_btnthis.parentNode.style.display = 'none'})</script>
</body></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><style>.erweima {width: 149px;height: 152px;border: 1px solid #000;background: url(./images/456.png) no-repeat;position: relative;}.close {position: absolute;right: -52px;top: -1px;width: 50px;height: 50px;background: url(./images/bgs.png) no-repeat -159px -102px;cursor: pointer;border: 1px solid #000;}</style>
</head><body><div class="erweima"><span class="close"></span></div><div class="erweima"><span class="close"></span></div><div class="erweima"><span class="close"></span></div><div class="erweima"><span class="close"></span></div><div class="erweima"><span class="close"></span></div><script>// 获取元素let close_btn = document.querySelectorAll('.close')//2.绑定多个点击事件给closefor (let i = 0;i < close_btn.length;i++){close_btn[i].addEventListener('click', function(){//3.关闭当前的那个二维码  点击谁,就关闭谁的爸爸this.parentNode.style.display = 'none'})}</script>
</body></html>

子节点查找:

  • childNodes

          获得所有子节点、包括文本节点(空格、换行)、注释节点等

  • children (重点)

            仅获得所有元素节点

           返回的还是一个伪数组

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><button>点击</button><ul><li>我是孩纸</li><li>我是孩纸</li><li>我是孩纸</li><li>我是孩纸</li><li>我是孩纸</li><li>我是孩纸</li></ul><script>let btn = document.querySelector('button')let ul = document.querySelector('ul')btn.addEventListener('click',function(){// console.log(ul.children)for (let i = 0;i < ul.children.length;i++){ul.children[i].style.color = 'red'}})ul.children[1].style.color = 'green'//console.log(ul.childNodes)</script>
</body>
</html>

兄弟关系查找:

1. 下一个兄弟节点:nextElementSibling 属性

2. 上一个兄弟节点:previousElementSibling 属性

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><button>点击</button><ul><li>第1个</li><li>第2个</li><li>第3个</li><li>第4个</li></ul><script>let btn = document.querySelector('button')let two = document.querySelector('.two')btn.addEventListener('click',function(){two.nextElementSibling.style.color = 'red'two.previousElementSibling.style.color = 'red'})</script>
</body>
</html>

1. 查找父节点用那个属性?

 parentNode

2. 查找所有子节点用那个属性?

 children

3. 查找兄弟节点用那个属性?

 nextElementSibling

 previousElementSibling

3.增加节点

目标:能够具备根据需求新增节点的能力 

1).创建节点

 即创造出一个新的网页元素,再添加到网页内,一般先创建节点,然后插入节点

 创建元素节点方法:

2).追加节点

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

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

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><ul><li>我是大毛</li><li>我是二毛</li></ul><script>//二毛 ul.children[1]//1.创建新的标签节点// let div = document.createElement('div')//div.className = 'current'let ul = document.querySelector('ul')let li = document.createElement('li')li.innerHTML = '我是小li'//2.追加节点 父元素.appendChild(子元素)  后面追加ul.appendChild(li)</script>
</body>
</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>
</head>
<body><ul><li>我是大毛</li><li>我是二毛</li></ul><script>//二毛 ul.children[1]//1.创建新的标签节点// let div = document.createElement('div')//div.className = 'current'let ul = document.querySelector('ul')let li = document.createElement('li')li.innerHTML = '我是小li'//2.追加节点 父元素.appendChild(子元素)  后面追加// ul.appendChild(li)//3.追加节点 父元素.insertBefore(子元素,放到哪个元素的前面)  ul.insertBefore(li,ul.children[1])</script>
</body>
</html>

 

案例:学成在线案例渲染

需求:按照数据渲染页面 分析:

  • ①:准备好空的ul 结构
  • ②:根据数据的个数,创建一个新的空li
  • ③:li里面添加内容 img 标题等
  • ④:追加给ul
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>学车在线首页</title><link rel="stylesheet" href="style.css"><style></style>
</head><body><!-- 4. box核心内容区域开始 --><div class="box w"><div class="box-hd"><h3>精品推荐</h3><a href="#">查看全部</a></div><div class="box-bd"><ul class="clearfix"><!-- <li><img src="./images/course01.png" alt=""><h4>Think PHP 5.0 博客系统实战项目演练</h4><div class="info"><span>高级</span> • <span> 1125</span>人在学习</div></li> --></ul></div></div><script>let data = [{src: 'images/course01.png',title: 'Think PHP 5.0 博客系统实战项目演练',num: 1125},{src: 'images/course02.png',title: 'Android 网络动态图片加载实战',num: 357},{src: 'images/course03.png',title: 'Angular2 大前端商城实战项目演练',num: 22250},{src: 'images/course04.png',title: 'Android APP 实战项目演练',num: 389},{src: 'images/course05.png',title: 'UGUI 源码深度分析案例',num: 124},{src: 'images/course06.png',title: 'Kami2首页界面切换效果实战演练',num: 432},{src: 'images/course07.png',title: 'UNITY 从入门到精通实战案例',num: 888},{src: 'images/course08.png',title: '我会变,你呢?',num: 590},{src: 'images/course08.png',title: '我会变,你呢?',num: 590}]let ul = document.querySelector('ul')//1.根据数据的个数 ,决定这个小Li的个数for (let i =0;i < data.length;i++){//2.创建小lilet li = document.createElement('li')//console,log(li)//4.先准备好内容,再追加li.innerHTML=`<img src="${data[i].src}" alt=""><h4>${data[i].title}</h4><div class="info"><span>高级</span> • <span> ${data[i].num}</span>人在学习</div>`//3.追加给ul 父元素.appendChild(子元素)ul.appendChild(li)}</script>
</body></html>
  1. 特殊情况下,我们新增节点,按照如下操作:
  •  复制一个原有的节点
  •  把复制的节点放入到指定的元素内部
  1. 克隆节点

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><ul><li>我是内容</li></ul><script>let ul = document.querySelector('ul')//括号为空则默认为false 如果是false则不克隆后代节点// let newUL = ul.cloneNode()//如果是true则克隆后代节点let newUL = ul.cloneNode(true)document.body.appendChild(newUL)</script>
</body>
</html>

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

 若为true,则代表克隆时会包含后代节点一起克隆

 若为false,则代表克隆时不包含后代节点

 默认为false

3).删除节点

目标:能够具备根据需求删除节点的能力

  1. 若一个节点在页面中已不需要时,可以删除它
  2. 在 JavaScript 原生DOM操作中,要删除元素必须通过父元素删除

语法:

注:

  • 如不存在父子关系则删除不成功
  • 删除节点和隐藏节点(display:none) 有区别的: 隐藏节点还是存在的,但是删除,则从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>
</head>
<body><button>点击</button><ul><li>我是内容11111</li></ul><script>//需求,点击按钮,删除小lilet btn = document.querySelector('button')let ul = document.querySelector('ul')btn.addEventListener('click',function(){//删除的语法 父元素.removeChild(子元素)ul.removeChild(ul.children[0])})</script>
</body>
</html>

 二.时间对象

目标:掌握时间对象,可以让网页显示时间

 时间对象:用来表示时间的对象

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

1.实例化  

目标:能够实例化时间对象

在代码中发现了 new 关键字时,一般将这个操作称为实例化,创建一个时间对象并获取时间

  •  获得当前时间
  • 获得指定时间 
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>//let arr = []// let arr = new Array()// let obj = {}// let obj = new Object()//new 实例化 时间对象//小括号为空可以得到当前时间let date = new Date()console.log(date)//小括号里面写上时间,可以返回指定的时间let last = new Date('2024-3-27 10:09:00')console.log(last)</script>
</body>
</html>
2.时间对象方法

目标:能够使用时间对象中的方法写出常见日期

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

方法作用说明
getFullYear()获得年份获取四位年份
getMonth()获得月份取值为 0 ~ 11
getDate()获取月份中的每一天不同月份取值也不相同
getDay()获取星期取值为0 ~ 6
getHours()获取小时取值为 0 ~ 23
getMinutes()获取分钟取值为 0 ~ 59
getSeconds()获取秒取值为 0 ~ 59
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>//new 实例化 时间对象//小括号为空可以得到当前的时间let date = new Date()console.log(date.getFullYear()) //年console.log(date.getMonth() + 1) //月console.log(date.getDate())   //日console.log(date.getHours())   //时console.log(date.getMinutes())   //分console.log(date.getSeconds())   //秒console.log(date.getDay() ) //星期几</script>

案例:页面显示时间

需求:将当前时间以:YYYY-MM-DD HH:mm 形式显示在页面

分析: ①:调用时间对象方法进行转换 ②:字符串拼接后,通过 innerText 给 标签

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div></div><script>let arr =['星期日','星期一','星期二','星期三','星期四','星期五','星期六',]//1.实例化事件对象setInterval(function(){let date = new Date()let year = date.getFullYear()let month = date.getMonth() + 1let date1 = date.getDate()let hour = date.getHours()let min = date.getMinutes()let sec = date.getSeconds()let day = date.getDay()let div = document.querySelector('div')div.innerHTML=`今天是:${year}年${month}月${date1}日 ${hour}:${min}:${sec} ${arr[day]}`},1000)</script>
</body>
</html>
 3.时间戳

目标:能够获得当前时间戳

  • 什么是时间戳

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

  •  三种方式获取时间戳
  1. 使用 getTime() 方法

 

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

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

相关文章

docker - 删除TAG为<none>的镜像

1.查看所有标记为 none 的镜像 docker images -f "danglingtrue"2. 获取镜像id docker images -f "danglingtrue" -q3、移除所有标记为 none 的镜像 docker rmi $(docker images -f "danglingtrue" -q)无法解决&#xff1a; 直接使用 docke…

Wireshark 抓包

启动时选择一个有信号的网卡双击打开&#xff0c;或者在 捕获选择里打开选择网卡。 然后输出下面的规则就可以抓到报文了。 最上面的三条是建立连接时的三次握手&#xff0c; 下面是发送数据hello 对应两条数据 最下面的4条是断时的4次挥手

Si24R2F+2.4GHz ISM 频段低功耗无线集成嵌入式发射基带无线

Si24R2F在原有Si24R2F的基础上&#xff1a;优化了射频性能、增加NTC测温、增加自动唤醒间隔、优化了蓝牙性能。在固定资产管理、冷链物流和牛羊畜牧业标签市场更具竞争力。 在原有SI24R2E做白卡/校徽的群体&#xff0c;在新的卡片机应用&#xff0c;更加推荐用SI24R2F&#xff…

[串联] MySQL 存储原理 B+树

InnoDB 是一种兼顾高可靠性和高性能的通用存储引擎&#xff0c;在 MySQL 5.5 之后&#xff0c;InnoDB 是默认的 MySQL 存储引擎。 InnoDB 对每张表在磁盘中的存储以 xxx.ibd 后缀结尾&#xff0c;innoDB 引擎的每张表都会对应这样一个表空间文件&#xff0c;用来存储该表的表结…

AXI-Stream——草稿版

参考自哔站&#xff1a;FPGA IP之AXI4-Lite AXI4-Stream_哔哩哔哩_bilibili 信号 传输层级从小到大 包(----------transfer--transfer--------)------delay--------包(----------transfer--transfer--------) TKEEP和TSTRB共同决定了是哪种数据流

Cocos游戏开发中的动态切割图片

点击上方亿元程序员+关注和★星标 引言 Cocos游戏开发中的动态切割图片 近日,由于笔者发现了另外一个非常有趣的画线切割小游戏,沉迷于夺回秋雅无法自拔,导致断更了一周多。(尊嘟假嘟) 言归正传,游戏体验过之后,非常感兴趣这个游戏中的切割效果是如何实现的呢? 今天…

Bean对象拷贝工具封装

在平时后端开发的过程中&#xff0c;经常要把对象封装成DTO,VO对象&#xff0c;来与前端进行交互 下面就是自己封装的对象拷贝工具&#xff1a; public class BeanCopyUtils {private BeanCopyUtils() {}public static <V> V copyBean(Object source,Class<V> cl…

【剑指offer】顺时针打印矩阵

题目链接 acwing leetcode 题目描述 输入一个矩阵&#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字。 数据范围矩阵中元素数量 [0,400]。 输入&#xff1a; [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 输出&#xff1a;[1,2,3,4,8,12,11,10,9,5,6,7] 解题 …

C语言动态分配数组

指针方式 可以使用指针&#xff0c;并在需要时通过malloc函数动态分配内存。下面是一个示例&#xff1a; #include <stdio.h> #include <stdlib.h>// 定义包含动态数组的结构体 struct DynamicArray {int size;int *array; };// 初始化结构体及动态数组 void ini…

【AutoML】一个用于图像、文本、时间序列和表格数据的AutoML

一个用于图像、文本、时间序列和表格数据的AutoML AutoGluon介绍安装AutoGluon快速上手 参考资料 AutoGluon自动化机器学习任务&#xff0c;使您能够在应用程序中轻松实现强大的预测性能。只需几行代码就可以训练和部署有关图像&#xff0c;文本&#xff0c;时间序列和表格数据…

记录在项目中引用本地的npm包

1、先把需要的包下载下来&#xff0c;以Photo Sphere Viewer 为引用的npm包、项目以shpereRepo为例子 git clone https://github.com/mistic100/Photo-Sphere-Viewer2、拉下代码后修改之后执行 ./build.sh build.sh #!/usr/bin/env bashyarn run build targetDir"../sh…

c# 设置图片透明度

逐个像素进行Alpha值的设置&#xff0c;网上其他的代码不能处理有透明背景的图片&#xff0c;因此要对Alpha、R、G、B均为0的透明色进行特殊处理&#xff0c;不做转换。 private Bitmap SetImageOpacity(Image srcImage, int opacity){Bitmap pic new Bitmap(srcImage);for (i…

mysql安装及操作

一、Mysql 1.1 MySQL数据库介绍 1.1.1 什么是数据库DB&#xff1f; DB的全称是database&#xff0c;即数据库的意思。数据库实际上就是一个文件集合&#xff0c;是一个存储数据的仓库&#xff0c;数据库是按照特定的格式把数据存储起来&#xff0c;用户可以对存储的数据进行…

【pytest、playwright】allure报告生成视频和图片

目录 1、修改插件pytest_playwright 2、conftest.py配置 3、修改pytest.ini文件 4、运行case 5、注意事项 1、修改插件pytest_playwright pytest_playwright.py内容如下&#xff1a; # Copyright (c) Microsoft Corporation. # # Licensed under the Apache License, Ver…

公网部署ctfd+ctfd_whale问题解决

参考博客 赵师傅&#xff1a;https://www.zhaoj.in/read-6333.html/comment-page-1 docker swarm&#xff1a;https://www.jianshu.com/p/77c4c62d9afe ctfd动态靶场搭建 https://blog.csdn.net/Java_ZZZZZ/article/details/131510368 docker swarm 节点标记 注意需要用以…

WPF 自定义按钮类实现

1.创建自定义按钮类 &#xff08;CustomButton.cs&#xff09; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Media;…

Redis 的内存回收策略

Redis的内存回收策略用于处理过期数据和内存溢出情况&#xff0c;确保系统稳定性和性能。作为一个高性能的键值存储系统&#xff0c;它通过内存回收策略来维护内存的高效使用 主要包括过期删除策略和内存淘汰策略。 过期删除策略&#xff1a; Redis的过期删除策略是通过设置…

yarn的安装以及使用案例

作为资深前端专家&#xff0c;对于各种前端工具和技术有着深入的了解和实践经验&#xff0c;其中Yarn就是一个重要的依赖管理工具。以下是对Yarn的安装以及使用案例的详细说明&#xff1a; 一、Yarn的安装 Yarn的安装相对简单&#xff0c;通常可以通过npm&#xff08;Node Pa…

Redis的持久化机制是怎样的?

Redis提供了两种持久化的机制&#xff0c;分别的RDB和AOF。 RDB RDB是将Redis的内存中的数据&#xff08;以快照的形式&#xff09;定期保存到磁盘上&#xff0c;以防治数据在Redis进程异常退出或服务器断电等情况下丢失。 RDB的优点是&#xff1a;快照文件小、恢复速度快&am…

Maven package classifier测试

package package阶段会生成一个jar文件&#xff0c;包含了main文件夹下编译后的资源。可作为其他项目的依赖引用。 classifier install后&#xff0c;在仓库中存放的artifact的最终文件&#xff0c;即将package最终文件存入仓库&#xff0c;若在打包时需要加以定制&#xff…