一、节点类型
01-DOM节点
- DOM节点:DOM树里每一个内容都称之为节点
- 节点类型
- 元素节点
- 所有的标签 比如 body、 div
- html 是根节点
- 属性节点
- 文本节点
- 其他

02-查找节点-子找父
- 父节点查找:
- parentNode 属性
- 返回最近一级的父节点 找不到返回为null
- 语法
<body>
<div class="box">
<p>我是p元素</p>
</div>
<script>
let p = document.querySelector('p')
let box = document.querySelector('.box')
console.log(p.parentNode)
console.log(box.parentNode)
console.log(document.body.parentNode)
console.log(document.documentElement.parentNode)
</script>
</body>
03-关闭二维码--一个
<style>
.erweima {
position: relative;
width: 160px;
height: 160px;
margin: 100px auto;
}
span {
position: absolute;
left: -20px;
top: 0;
display: block;
width: 20px;
text-align: center;
border: 1px solid #ccc;
cursor: pointer;
}
</style>
</head>
<body>
<div class="erweima">
<img src="./images/code.png" alt="" />
<span> X1 </span>
</div>
<script>
let span = document.querySelector('span')
span.addEventListener('click', function() {
span.parentNode.style.display = 'none'
})
</script>
</body>
04-查找节点-父找子
- 子节点查找:
- childNodes
- 获得所有子节点、包括文本节点(空格、换行)、注释节点等
- children (重点)
- 语法:父元素.children
<body>
<div class="box">
<p>aaaa</p>
<span>span</span>
这是字
</div>
<script>
let box = document.querySelector('.box')
console.log(box.childNodes)
console.log(box.children)
</script>
</body>
04-关闭二维码--多个
<style>
.erweima {
position: relative;
width: 160px;
height: 160px;
margin: 100px auto;
}
span {
position: absolute;
left: -20px;
top: 0;
display: block;
width: 20px;
text-align: center;
border: 1px solid #ccc;
cursor: pointer;
}
</style>
</head>
<body>
<div class="erweima">
<img src="./images/code.png" alt="" />
<span> X1 </span>
</div>
<div class="erweima">
<img src="./images/code.png" alt="" />
<span> X2 </span>
</div>
<div class="erweima">
<img src="./images/code.png" alt="" />
<span> X3 </span>
</div>
<div class="erweima">
<img src="./images/code.png" alt="" />
<span> X4 </span>
</div>
<div class="erweima">
<img src="./images/code.png" alt="" />
<span> X5 </span>
</div>
<script>
let spans = document.querySelectorAll('span')
spans.forEach(function(ele) {
ele.addEventListener('click', function() {
ele.parentNode.style.display = 'none'
})
})
</script>
</body>
05-查找节点-找兄弟
- 兄弟关系查找:
-
- 下一个兄弟节点
-
- 上一个兄弟节点
- previousElementSibling 属性
<body>
<div class="box">
<p>我是p元素</p>
<span>我是span</span>
<h2>我是h2</h2>
</div>
<script>
let span = document.querySelector('span')
let p = document.querySelector('p')
let h2 = document.querySelector('h2')
console.log(h2.nextElementSibling)
console.log(h2.previousElementSibling)
</script>
</body>
06-创建元素
- 1.创建节点
- 即创造出一个新的网页元素,再添加到网页内,一般先创建节点,然后插入节点
- 创建元素节点方法
- 语法:document.createElement('标签名')
- 2.追加节点
- 要想在界面看到,还得插入到某个父元素中
- 插入到父元素的最后一个子元素:
- 语法:父元素.appendChild(要插入的元素)
- 插入到父元素中某个子元素的前面
- 语法:父元素.insertBefore(要插入的元素,在哪个元素的前面)
<style>
.box {
width: 500px;
height: 500px;
border: 1px solid red;
}
span {
display: block;
}
</style>
</head>
<body>
<button>来一个p元素</button>
<div class="box">
<span>这是原始就有的1</span>
<span>这是原始就有的2</span>
<span>这是原始就有的3</span>
</div>
<script>
let btn = document.querySelector('button')
let box = document.querySelector('.box')
btn.addEventListener('click', function() {
let newP = document.createElement('p')
newP.innerText = '以前怎么写现在也怎么写'
newP.style.color = 'red'
console.log(newP)
box.appendChild(newP)
box.insertBefore(newP.cloneNode(true), box.children[0])
})
</script>
</body>
07-元素操作
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<title></title>
<style>
select {
width: 200px;
background-color: teal;
height: 200px;
font-size: 20px;
}
.btn-box {
width: 30px;
display: inline-block;
vertical-align: top;
}
</style>
</head>
<body>
<h1>城市选择:</h1>
<select id="src-city" name="src-city" multiple>
<option value="1">北京</option>
<option value="2">上海</option>
<option value="3">深圳</option>
<option value="4">广州</option>
<option value="5">西红柿</option>
</select>
<div class="btn-box">
<button id="btn1">>></button>
<button id="btn2"><<</button>
<button id="btn3">></button>
<button id="btn4"><</button>
</div>
<select id="tar-city" name="tar-city" multiple></select>
<script>
let srcCity = document.querySelector('#src-city')
let tarCity = document.querySelector('#tar-city')
let btn1 = document.querySelector('#btn1')
let btn2 = document.querySelector('#btn2')
let btn3 = document.querySelector('#btn3')
let btn4 = document.querySelector('#btn4')
</script>
</body>
</html>
08-复制节点
<body>
<button>复制节点并添加到另外一个div中</button>
<div class="first">
<p><span>我是first的p元素</span></p>
</div>
<div class="second"></div>
<script>
let btn = document.querySelector('button')
let first = document.querySelector('.first')
let second = document.querySelector('.second')
let p = document.querySelector('p')
btn.addEventListener('click', function() {
second.appendChild(p.cloneNode(true))
})
</script>
</body>
09-删除节点
<body>
<table border="1" width="400">
<thead>
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>张三</td>
<td>20</td>
<td>
<button>删除1</button>
</td>
</tr>
<tr>
<td>2</td>
<td>李四</td>
<td>30</td>
<td>
<button>删除2</button>
</td>
</tr>
<tr>
<td>3</td>
<td>王五</td>
<td>40</td>
<td>
<button>删除3</button>
</td>
</tr>
</tbody>
</table>
<script>
let dels = document.querySelectorAll('button')
let tbody = document.querySelector('tbody')
dels.forEach(function(ele) {
ele.addEventListener('click', function() {
ele.parentNode.parentNode.remove()
})
})
</script>
二、时间对象
10-实例化
- 在代码中发现了 new 关键字时,一般将这个操作称为实例化
- 创建一个时间对象并获取时间
- 获得当前时间
- 获得指定时间
- let date = new Date('1949-10-01')
<body>
<h1></h1>
<button>获取时间</button>
<input type="datetime-local" />
<script>
let date = new Date()
console.log(date)
let btn = document.querySelector('button')
let input = document.querySelector('input')
btn.addEventListener('click', function() {
console.log(input.value, typeof input.value)
console.log(new Date(input.value), typeof new Date(input.value))
})
</script>
</body>
11-时间对象-api

<body>
<h1></h1>
<script>
let h1 = document.querySelector('h1')
setInterval(function() {
let date = new Date()
let year = date.getFullYear()
let month = date.getMonth() + 1
let day = date.getDate()
let hour = date.getHours()
let minute = date.getMinutes()
minute = minute < 10 ? '0' + minute : minute
let second = date.getSeconds()
second = second < 10 ? '0' + second : second
h1.innerHTML = `${year}-${month}-${day} ${hour}:${minute}:${second}`
}, 1000)
</script>
</body>
12-时间戳
- 什么是时间戳
- 是指1970年01月01日00时00分00秒起至现在的毫秒数,它是一种特殊的计量时间的方式
- 三种方式获取时间戳
-
- 使用 getTime() 方法--------需要创建对象 可以指定任意的时间
-
- 简写 +new Date()--------需要创建对象 可以指定任意的时间
-
- 使用 Date.now()--------不需要创建对象 但是不能指定任意的时间
<script>
// console.log(new Date('2022-6-23 18:30') - new Date('2022-6-23 15:42'))
let date = new Date()
console.log(date.getTime())
console.log(+new Date('1971-1-1'))
console.log(Date.now())
</script>
13-下班倒计时(案例)
<!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 .next {
font-size: 16px;
margin: 25px 0 14px;
}
.countdown .title {
font-size: 33px;
}
.countdown .tips {
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;
}
</style>
</head>
<body>
<div class="countdown">
<p class="next">今天是2022年3月28日</p>
<p class="title">下班倒计时</p>
<p class="clock">
<span id="hour">00</span>
<i>:</i>
<span id="minutes">00</span>
<i>:</i>
<span id="scond">00</span>
</p>
<p class="tips">
现在是18:30:00
</p>
</div>
<script>
let hourEle = document.querySelector('#hour')
let minutesEle = document.querySelector('#minutes')
let scondEle = document.querySelector('#scond')
let end = +new Date('2022-6-23 18:30:00')
setInterval(function() {
let start = Date.now()
let offset = parseInt((end - start) / 1000)
console.log(offset)
let hour = parseInt(offset / 3600)
let minute = parseInt((offset % 3600) / 60)
let second = offset % 60
hourEle.innerHTML = hour < 10 ? '0' + hour : hour
minutesEle.innerHTML = minute < 10 ? '0' + minute : minute
scondEle.innerHTML = second < 10 ? '0' + second : second
}, 1000)
</script>
</body>
</html>