Web API —— DOM 学习(四)(完结)

目录

一、日期对象

(一)实例化

(二)日期对象方法

1.时间戳介绍

2.获得时间戳的方式

getTime()方法

+ new Date()方法

Date.now()方法

二、节点操作

(一)DOM 节点

1.节点类型

元素节点 (主要)

2.属性节点

3.文本节点

(二)查找节点

1.父节点查找

 关闭广告的新写法

2.子节点查找 

通过 childNodes 查找 (不常用)

通过 children 查找

3.兄弟节点查找 

上一个兄弟节点查找

下一个兄弟节点查找

(二)节点增加

1.创建节点

2. 追加节点

插入到父亲最后一个子元素

插入到父亲某个子元素的前面

(三)克隆节点

(四)删除节点  

四、M端事件 (了解)

(一)touch :触屏事件

(二)插件地址

练习:倒计时练习

练习:学生信息表


一、日期对象

想让网页显示日期就得用日期对象,可以得到当前的系统时间

(一)实例化

如果在代码中发现了 new 关键字 就称这个操作为实例化

获得当前时间: const data = new Date()

<body>
<script>const date = new Date()console.log(date)
</script>
</body>

获得指定时间:const date1 = new Date('2022-5-1 08:30:00')

可以用作倒计时

<body>
<script>const date = new Date('2022-5-1')console.log(date)
</script>
</body>

(二)日期对象方法

我们需要能用日期对象中的方法写出常见日期

getFullYear() 获取四位年份

getMonth() 获得月份 0-11

getDate() 获得月份的每一天,不同月份取值不同。

getDay() 获得星期 0-6 0 是星期天

得先获得对象再用上面那些方法 得到的月份是从 0 开始的所以要加1

<body><script>const date = new Date()console.log(date.getFullYear())console.log(date.getMonth() + 1)console.log(date.getDate())console.log(date.getDay())</script>
</body>

在 div 中动态显示现在时间

<body><div></div><script>const div = document.querySelector('div')const date = new Date()div.innerHTML = date.toLocaleString()setInterval(function () {const date = new Date()div.innerHTML = date.toLocaleString()}, 1000)</script>
</body>

(三)时间戳

1.时间戳介绍

如果要进行倒计时就需要用时间戳去计算,记得先调用一次再使用计时器,要不然倒计时不连贯。

时间戳是指 从1970 年 01 月 00 时 00 分 00 秒起到现在的毫秒数, 是一种特殊的计量时间方式

用将来的时间戳减去过去的时间戳等于剩余时间的毫秒数

把结果换成年月日时分秒就是最后的结果了,得出倒计时 1000毫秒就是1s

2.获得时间戳的方式
getTime()方法

能返回指定时间

<body><script>const date = new Date()console.log(date.getTime())</script>
</body>
+ new Date()方法

能返回指定时间

<body><script>const date = +new Date()console.log(date)</script>
</body>
Date.now()方法

无需实例化,不能返回指定时间

<body><script>console.log(Date.now())</script>
</body>

二、节点操作

(一)DOM 节点

DOM 树里每个内容都能称之为一个节点,树上的分支点

1.节点类型
元素节点 (主要)

所有标签:body div 等标签都是节点

html 是根节点·

2.属性节点

比如链接 href

3.文本节点

div 里面的字 各种标签里的字

(二)查找节点

1.父节点查找

通过parentNode 属性来查找,返回最近一级的父亲节点,找不到返回 null

下面返回父亲对象(父对象)

<body><div class="father"><div class="son"></div></div><script>const son =document.querySelector('.son')console.log(son.parentNode)</script>
</body>
 关闭广告的新写法

通过parentNode来关闭父元素,方便关闭多个广告

<body><div class="guanggao"><div class="box"></div></div><script>const box = document.querySelector('.box')box.addEventListener('click', function () {this.parentNode.style.display = 'none'})</script>
</body>
2.子节点查找 
通过 childNodes 查找 (不常用)

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

查出来太多没用的了 所以不常用这个。

通过 children 查找

仅获得所有元素节点,返回的是一个伪数组

<body><ul><li></li><li></li><li></li><li></li><li></li></ul><script>const ul = document.querySelector('ul')console.log(ul.children)</script>
</body>
3.兄弟节点查找 
上一个兄弟节点查找

nextElementSibling 属性

下一个兄弟节点查找

previousElementSibling 属性

<body><ul><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul><script>const l2 = document.querySelector('ul li:nth-child(2)')console.log(l2.previousElementSibling)console.log(l2.nextElementSibling)</script>
</body>

(二)节点增加

先创建一个新的节点 然后把新的节点放在指定的元素内部

1.创建节点

document.createElement(‘标签名’)

<body><script>const div = document.createElement('div')console.log(div)</script>
</body>
2. 追加节点

要想看到我们新创的节点我们还需要 把这个节点插入到某个父元素中去

插入到父亲最后一个子元素

父元素.appendChild(要插入的元素) 插入是作为父亲最后一个子元素插入的,所以在最后面

<body><ul><li>我是原生的</li></ul><script>const ul = document.querySelector('ul')const li = document.createElement('li')li.innerHTML = '我是li'ul.appendChild(li)</script>
</body>
插入到父亲某个子元素的前面

父元素.insertBefore(要插入的元素, 要插入在谁的前面)

ul.children 返回一个数组 这样就能在第一个前面插入了

<body><ul><li>我是原生的</li></ul><script>const ul = document.querySelector('ul')const li = document.createElement('li')li.innerHTML = '我是li'ul.insertBefore(li, ul.children[0])</script>
</body>

循环生成 li 并更改里面的内容

<body><div class="box"><ul class="clearfix"></ul></div><script>data = [{}, {}]//里面是图片的链接等相关数据const ul = document.querySelector('.box ul')for (let i = 0; i < data.length; i++) {const li = document.createElement('li')ul.appendChild(li)li.innerHTML(`       里面复制 li 的内容 并把链接换成自己的`)}</script>
</body>

(三)克隆节点

特殊情况下,增加新节点时,先复制一个原有节点,然后把复制的节点放入到指定的元素内部

元素.cloneNode(布尔值)

浅克隆:里面的布尔值 如果是 false 只克隆标签

深克隆:如果是 true 就是被克隆的对象内部有什么都克隆过来。

<body><ul><li>1</li><li>2</li><li>3</li></ul><script>const ul = document.querySelector('ul')const li1 = ul.children[0].cloneNode(true)ul.appendChild(li1)</script>
</body>

(四)删除节点  

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

不能直接删除只能通过父亲删儿子

父元素.removeChild(要删除的元素)

和display:none 的区别:

display 只是在 HTML 中隐藏了 DOM 节点还存在

但是这个是真的删除了

<body><ul><li>没用了</li></ul><script>const ul = document.querySelector('ul')ul.removeChild(ul.children[0])</script>
</body>

四、M端事件 (了解)

移动端自己独特的事件

(一)touch :触屏事件

touchstart :手指触摸到一个 DOM 元素触发

touchmove: 手指在一个 DOM 元素上滑动时触发

touchend: 手指在一个 DOM 元素上移开时触发

<body><div></div><script>const div = document.querySelector('div')div.addEventListener('touchstart', function () {console.log('有人摸我')})div.addEventListener('touchend', function () {console.log('移走了')})div.addEventListener('touchmove', function () {console.log('一直摸')})</script>
</body>

(二)插件地址

先下载然后把css 和 javascript 文件夹拖入到我们项目文件夹下,然后分别引入 css 和 js 文件夹

<link  rel = 'stylesheet' href=''>

和 <script src=''></script>

先查看我们想要的样式 然后预览一下 右键查看源代码 然后把对应的部分复制到相应的地方。

练习:倒计时练习

界面展示:

代码部分:

<!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>
<style>div {width: 200px;height: 50px;background-color: pink;}
</style>
<body><div><span class="hour"></span><span class="minutes"></span><span class="scond"></span></div><script>function getTime(){const now = +new Date()const last = +new Date('2024-3-24 18:30:00')const count = (last - now) / 1000let h = parseInt(count / 60 / 60 % 24)h = h < 10 ? '0' + h : hlet m = parseInt(count / 60 % 60)m = m < 10 ? '0' + m : mlet s = parseInt(count % 60)s = s < 10 ? '0' + s : sconst hour = document.querySelector('.hour')const minutes = document.querySelector('.minutes')const scond = document.querySelector('.scond')hour.innerHTML = hminutes.innerHTML = mscond.innerHTML = s}getTime()setInterval(getTime,1000)</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>
<style>* {margin: 0;padding: 0;}li {float: left;list-style: none;margin-left: 10px;}ul li:first-child {margin-left: 0;}.header {width: 80%;height: 50px;margin: 0 auto;background-color: red;}.bottom {width: 80%;margin: 0 auto;background-color: gray;}input {width: 60px;}h3 {text-align: center;}tbody {width: 100%;}table {width: 100%;}tr {width: 100%;}th {padding: 0 20px;text-align: center;}tr {padding: 0 20px;text-align: center;}
</style><body><form class="info"><div class="header"><h3>新增学员</h3><div class="limian"><ul><li>姓名: <input type="text" class="uname" name="uname"></li><li>年龄: <input type="text" class="age" name="age"></li><li>性别:<select class="gender" name="gender" name="gender"><option>男</option><option>女</option></select></li><li>薪资: <input type="text" class="salary" name="salary"></li><li>就业城市:<select class="city" name="city"><option>北京</option><option>南京</option></select></li><li><button>录入</button></li></ul></div></div></form><div class="bottom"><h3>就业榜</h3><div class="xiamian"><table class="tab"><thead><tr><th>学号</th><th>姓名</th><th>年龄</th><th>性别</th><th>薪资</th><th>就业城市</th><th>操作</th></tr></thead><tbody><!-- <tr><td></td><td></td><td></td><td></td><td></td><td></td><td><a href="javascript:">删除</a></td></tr> --></tbody></table></div></div><script>const arr = []const uname = document.querySelector('.uname')const age = document.querySelector('.age')const gender = document.querySelector('.gender')const salary = document.querySelector('.salary')const city = document.querySelector('.city')const info = document.querySelector('.info')const tbody = document.querySelector('tbody')const items = document.querySelectorAll('[name]')info.addEventListener('submit', function (e) {e.preventDefault()for (let i = 0; i < items.length; i++) {if (items[i].value === '') {return alert('输入内容不能为空')}}const obj = {stuId: arr.length + 1,uname: uname.value,age: age.value,gender: gender.value,salary: salary.value,city: city.value}arr.push(obj)this.reset()rander()})function rander() {tbody.innerHTML = ``for (let i = 0; i < arr.length; i++) {const tr = document.createElement('tr')tr.innerHTML = `<td>${arr[i].stuId}</td><td>${arr[i].uname}</td><td>${arr[i].age}</td><td>${arr[i].gender}</td><td>${arr[i].salary}</td><td>${arr[i].city}</td><td><a href="javascript:" data-id='${i}'>删除</a></td>`tbody.appendChild(tr)}}tbody.addEventListener('click', function (e) {if (e.target.tagName === 'A') {arr.splice(e.target.dataset.id, 1)console.log(arr)rander()}})</script>
</body></html>

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

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

相关文章

SpringBoot 邮件服务集成配置全面解析

前言 本文以网易邮箱&#xff08;及 163 邮箱&#xff09;为例&#xff0c;展示如何为 SpringBoot 项目集成邮件服务&#xff0c;其他邮箱配置类似&#xff0c;可以自行查看 Spring Email 指南 或是其他官方文档 授权码 首先我们需要获取授权码&#xff0c;用于后续配置&…

【线段树二分】第十三届蓝桥杯省赛C++ A组/研究生组 Python 研究生组《扫描游戏》(C++)

【题目描述】 有一根围绕原点 O 顺时针旋转的棒 OA&#xff0c;初始时指向正上方&#xff08;Y 轴正向&#xff09;。 在平面中有若干物件&#xff0c;第 i 个物件的坐标为&#xff08;,)&#xff0c;价值为 。 当棒扫到某个物件时&#xff0c;棒的长度会瞬间增长 &#xff…

R语言ggplot2 | 热图+随机森林重要性!升级版~

&#x1f4cb;文章目录 原图复现定义ggrf_ggcor_plot()函数加载数据集一键出图函数优点 今天推出一个升级版&#xff1a; ggrf_ggcor_plot的函数。只需要输入 响应变量的矩阵和 解释变量的矩阵&#xff0c;就能轻松一键生成随机森林重要性相关性热图。 原图 所需复现的随机森…

发车,易安联签约某新能源汽车领军品牌,为科技创新保驾护航

近日&#xff0c;易安联成功签约某新能源汽车领军品牌&#xff0c;为其 数十万终端用户 建立一个全新的 安全、便捷、高效一体化的零信任终端安全办公平台。 随着新能源汽车行业的高速发展&#xff0c;战略布局的不断扩大&#xff0c;技术创新不断引领其市场价值走向高点&am…

如何在数字化转型中确保数据安全

随着科技的飞速发展&#xff0c;数字化转型已成为企业发展的必然趋势。数字化转型是指企业利用数字技术对业务流程、组织结构和商业模式进行全面创新和变革&#xff0c;以提高企业的竞争力和创新能力。然而&#xff0c;在数字化转型过程中&#xff0c;数据安全问题日益凸显&…

新能源汽车充电桩主板各模块成本占比解析

汽车充电桩主板是汽车充电桩的重要组件&#xff0c;主要由微处理器模块、通信模块、控制模块、安全保护模块、传感器模块等多个模块构成。深入探究各模块在总成本中的比重&#xff0c;我们可以更好地优化成本结构、提高生产效率&#xff0c;并为未来的技术创新和市场需求变化做…

R语言学习——Rstudio软件

R语言免费但有点难上手&#xff0c;是数据挖掘的入门级别语言&#xff0c;拥有顶级的可视化功能。 优点&#xff1a; 1统计分析&#xff08;可以实现各种分析方法&#xff09;和计算&#xff08;有很多函数&#xff09; 2强大的绘图功能 3扩展包多&#xff0c;适合领域多 …

Docker - 哲学 默认网络和 自定义网络 与 linux 网络类型 和 overlay2

默认网络&#xff1a;不指定 --nerwork 不指定 网络 run 一个容器时&#xff0c;会直接使用默认的网络桥接器 &#xff08;docker0&#xff09; 自定义网络&#xff1a;指定 --nerwork 让这两台容器互相通信 的前提 - 共享同一个网络 关于 ip addr 显示 ens160 储存驱动 ov…

入行AI写作第一个月收入2万+复盘分享

入行AI写作第一个月收入2万复盘分享 AI写作作为一种新兴的创作方式&#xff0c;正逐渐改变着内容产业的生态。在这个领域中&#xff0c;许多人通过自己的努力和智慧&#xff0c;实现了快速的成长和收入的增长。本文将从技术学习与掌握、实践与应用、内容创作与优化、持续学习与…

java 面向对象入门

类的创建 右键点击对应的包&#xff0c;点击新建选择java类 填写名称一般是名词&#xff0c;要知道大概是什么的名称&#xff0c;首字母一般大写 下面是创建了一个Goods类&#xff0c;里面的成员变量有&#xff1a;1.编号&#xff08;id&#xff09;&#xff0c;2.名称&#x…

护眼落地灯怎么选?五款好评连连的护眼大路灯曝光!

现代人越来越重视视力健康&#xff0c;而护眼落地灯则可以很好的提供良好的光线来帮助大家解决平时用眼时的不良光线困扰&#xff0c;因此&#xff0c;受到了很多人喜爱。但是&#xff0c;在产品爆火的同时&#xff0c;市场上也出现了一些质量差且劣质的护眼落地灯&#xff0c;…

Microsoft .NET 应用程序性能监控

什么是 .NET监控 Microsoft .NET 监视在确保可以开发和部署应用程序而不必面对性能滞后或中断方面发挥着重要作用。它使用警报、增长趋势报告和数据可视化技术来帮助管理员确保 Microsoft .NET 平台的全天候可用性。Microsoft.NET 性能监视是一种检测性能异常的先发制人方法&a…

linux 网卡配置 vlan/bond/bridge/macvlan/ipvlan 模式

linux 网卡模式 linux网卡支持非vlan模式、vlan模式、bond模式、bridge模式&#xff0c;macvlan模式、ipvlan模式等&#xff0c;下面介绍交换机端及服务器端配置示例。 前置要求&#xff1a; 准备一台物理交换机&#xff0c;以 H3C S5130 三层交换机为例准备一台物理服务器&…

Nacos配置中心的敏感数据加密处理

为了简化运维工作,使用nacos作为配置中心,但很多敏感数据都是明文存储的,这样一旦数据泄露,可能会造成很大影响,所以最好把这些数据进行加密处理,下面介绍几种数据的加密。 一、数据库信息加密 数据库的配置本篇介绍两种,一是使用druid连接池的,这种比较常见;二是使…

网络安全-提权篇

我们在文件包含的时候可以将错误的用户名包含进日志&#xff0c;但是权限问题让人很烦恼&#xff0c;今天的侧重点主要是跟大家聊一聊提权 用户名包含进日志参考&#xff1a;RCE with LFI and SSH Log Poisoning - Hacking Articles 目录 一、环境 二、看看权限&#xff08;…

vue指令相关

vue中有很多的指令像v-on、v-model、v-bind等是我们开发中常用的 常用指令 v-bind 单向绑定解析表达式 v-model 双向数据绑定 v-for 遍历数组/对象/字符串 v-on 绑定事件监听,可简写为@ v-show 条件渲染(动态控制节点是否存展示) v-if 条件渲染(动态控制节点是否存存在) v…

AI智聊功能支持生成旅游攻略、作文、标题优化,方便视频剪辑

在快节奏的生活中&#xff0c;我们总是需要快速、准确地获取所需信息。无论是撰写旅游攻略、作文&#xff0c;还是准备演讲稿&#xff0c;AI智聊都能为您一键生成精彩文案&#xff0c;让您的创意无限发挥&#xff01; 媒体梦工厂的AI智聊功能&#xff0c;利用先进的自然语言处…

Teamcenter 快速获取所有激活状态用户的方法

问题描述&#xff1a; License数量有限&#xff0c;需要分析Teamcenter 中所有激活状态下的用户&#xff0c;对其进行删减。如何快速获取Teamcenter 中所有激活状态用户呢&#xff1f; 解决方法&#xff1a; Teamcenter Query Builder提供了强大的自定义搜索功能。 新建查询…

软考高级架构师:云原生架构模式概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

v4l2采集视频

Video4Linux2&#xff08;v4l2&#xff09;是用于Linux系统的视频设备驱动框架&#xff0c;它允许用户空间应用程序直接与视频设备&#xff08;如摄像头、视频采集卡等&#xff09;进行交互。 linux系统下一切皆文件&#xff0c;对视频设备的操作就像对文件的操作一样&#xff…