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.mzph.cn/news/773866.shtml

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

相关文章

1+x中级题目练习复盘(20220625 1+X 中级理论考试)

Override 用于标注重写方法 函数式接口是指有且只有一个抽象方法的接口&#xff1b;

vue项目使用eletron将打包成桌面应用(.exe)

vue项目使用eletron将打包成桌面应用(.exe) 1.前期准备 两个项目&#xff1a; 1、自己用vue cli创建的项目 2、第二个是去gitee将案例clone下来 案例地址 https://gitee.com/qingplus/electron-quick-start.git 2、测试案例是否可以正常运行 # 进入项目 cd electron-quick-…

任务管理工具Trello体验如何?一文揭秘

Trello是一款高效的协作与工作管理应用&#xff0c;这里我们将详细介绍Trello的功能、特点、优劣势、价格、定价、发展历程、使用场景以及使用技巧等等。 一、Trello 是什么 Trello是一款高效的协作与工作管理应用&#xff0c;设计用于跟踪团队项目、凸显当前活动任务、指派责…

POJ3037 + HDU-6714

两道最短路好题 POJ3037 手玩一下 发现每一点的速度可以直接搞出来&#xff0c;就是pow(2,h[1][1]-h[i][j])*V 那么从这个点出发到达别的点的耗费的时间都是上面这个数的倒数&#xff0c;然后直接跑最短路就好了 #include<iostream> #include<vector> #include<…

赛氪网积极参与千校万企协同创新行动,推动产学研深度融合

3月17日&#xff0c;中国千校万企协同创新推进会在北京盛大召开&#xff0c;会议旨在实现高校与行业龙头企业技术升级需求的精准对接&#xff0c;加速新质生产力的形成与发展。教育部党组成员、副部长孙尧&#xff0c;科技部成果转化司副司长秦浩源&#xff0c;国家知识产权局知…

王者荣耀国服米莱迪 - 出装打法详细教学视频(最新)

01. 恰到好处的一技能 02. 灵魂二技能 03. 无敌大招连招 04. 为所欲为的出装 05. 拥有这个召唤师技能赢一半 06. 英雄克制 07. 整局精讲 08. 米莱迪最强出装 09. 米莱迪最强出装的铭文 发送内容: "米莱迪", 获取提取码

【Java程序设计】【C00383】基于(JavaWeb)Springboot的水产养殖系统(有论文)

【C00383】基于&#xff08;JavaWeb&#xff09;Springboot的水产养殖系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c…

阿里云ECS选型推荐配置

本文介绍构建Kubernetes集群时该如何选择ECS类型以及选型的注意事项。 集群规格规划 目前在创建Kubernetes集群时&#xff0c;存在着使用很多小规格ECS的现象&#xff0c;这样做有以下弊端&#xff1a; 网络问题&#xff1a;小规格Worker ECS的网络资源受限。 容量问题&…

推荐多样性 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C++ 题目描述 推荐多样性需要从多个列表中选择元素,一次性要返回N屏数据(窗口数量),每屏展示K个元素(窗口大小),选择策略: 各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一个元素,再从第二个列表…

BRICK POP展示了有趣的链上游戏玩法与奖励机制

新游戏BRICK POP将Sui区块链技术与低Gas费用&#xff0c;以及其在Web3游戏开发方面的专业知识无缝结合。通过充分利用Sui和ONBUFF的INNO平台优势&#xff0c;BRICK POP为玩家提供了一个融合了前沿技术和引人入胜游戏的沉浸式游戏体验。BRICK POP游戏设计为实时交易和高用户参与…

大数据开发(日志离线分析项目)

大数据开发&#xff08;日志离线分析项目&#xff09; 一、项目需求1、使用jqueryecharts的方式调用程序后台提供的rest api接口&#xff0c;获取json数据&#xff0c;然后通过jquerycss的方式进行数据展示。工作流程如下&#xff1a;2、七大角度1、用户基本信息分析模块2、浏览…

【Python】学习率调整策略详解和示例

学习率调整得当将有助于算法快速收敛和获取全局最优&#xff0c;以获得更好的性能。本文对学习率调度器进行示例介绍。 学习率调整的意义基础示例无学习率调整方法学习率调整方法一多因子调度器余弦调度器 结论 学习率调整的意义 首先&#xff0c;学习率的大小很重要。如果它…

java 面向对象入门

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

Android 性能优化(六):启动优化的详细流程

书接上文&#xff0c;Android 性能优化&#xff08;一&#xff09;&#xff1a;闪退、卡顿、耗电、APK 从用户体验角度有四个性能优化方向&#xff1a; 追求稳定&#xff0c;防止崩溃追求流畅&#xff0c;防止卡顿追求续航&#xff0c;防止耗损追求精简&#xff0c;防止臃肿 …

【IT之家】IT之家网站的资讯文章资源,实时数据抓取检索软件免费下载NO.65

简介&#xff1a;IT之家是业内领先的IT资讯和数码产品类网站。IT之家快速精选泛科技新闻&#xff0c;分享即时的IT业界动态和紧跟潮流的数码产品资讯&#xff0c;提供给力的PC和手机技术文章、丰富的系统应用美化资源&#xff0c;以及享不尽的智能阅读。 本软件基于C#实现的win…

苹果 WWDC 24 将举行;高通、谷歌、英特尔等联合开发 AI 软件;艺术家谈及使用 Sora 创作视频体验

▶ 苹果WWDC 24 将于当地时间 6 月 10 日召开 3 月 27 日凌晨&#xff0c;苹果官宣将于当地时间 6 月 10 日举行今年的全球开发者发布大会。 苹果全球营销高级副总裁 Greg Joswiak 在社交媒体上表示&#xff1a;「在您的日历标记上 WWDC24 吧。这场活动无疑会令人惊喜&#xf…

数字化转型核心:实现业务与技术深度融合的运维数字化管理之道

写在前面 数字化转型已经成为大势所趋&#xff0c;各行各业正朝着数字化方向转型&#xff0c;利用数字化转型方法论和前沿科学技术实现降本、提质、增效&#xff0c;从而提升竞争力。 数字化转型是一项长期工作&#xff0c;包含的要素非常丰富&#xff0c;如数字化转型顶层设…

Spring:面试八股

文章目录 参考Spring模块CoreContainerAOP 参考 JavaGuide Spring模块 CoreContainer Spring框架的核心模块&#xff0c;主要提供IoC依赖注入功能的支持。内含四个子模块&#xff1a; Core&#xff1a;基本的核心工具类。Beans&#xff1a;提供对bean的创建、配置、管理功能…

同城双活:交易链路的稳定性与可靠性探索

知易行难&#xff0c;双活过程中遇到了非常多的问题&#xff0c;但是回过头看很难完美的表述出来&#xff0c;之所以这么久才行文也是这个原因&#xff0c;总是希望可以尽可能的复现当时的思考、问题细节及解决方案&#xff0c;但是写出来才发现能给出的都是多次打磨、摸索之后…

阿里云安装宝塔后面板打不开

前言 按理来说装个宝塔面板应该很轻松的&#xff0c;我却装了2天&#xff0c;真挺恼火的&#xff0c;网上搜的教程基本上解决不掉我的问题点&#xff0c;问了阿里云和宝塔客服&#xff0c;弄了将近2天&#xff0c;才找出问题出在哪里&#xff0c;在此记录一下问题的处理。 服…