<div class="box">
<div class="box1">你好</div>
</div>
// 1. parentNode 查找父节点
let num = document.querySelector('.box1')
num.parentNode.style.display = 'none'
<div class="box">
<img src="images/1.png">
<i class="box1">x</i>
</div>
//点击关闭按钮, 关闭的是二维码的盒子, 还要获取erweima盒子
//点击关闭按钮, 直接关闭它的爸爸,就无需获取erweima元素了
let num = document.querySelector('.box1')
num.addEventListener('click', function () {
this.parentNode.style.display = 'none'
})
<div class="box1">
<span class="box2"></span>
</div>
//多个二维码,点击谁,谁关闭
let num1 = document.querySelectorAll('.box2')
// 绑定多个事件给box3
for (let num2 = 0; num2 < num1.length; num2++) {
num1[num2].addEventListener('click', function () {
// 关闭当前二维码 点击谁 就关闭父元素
this.parentNode.style.display = 'none'
})
}
// 1. 查找子节点 children 伪元素
let num1 = document.querySelector('button')
let num2 = document.querySelector('ul')
num1.addEventListener('click', function () {
for (let num3 = 0; num3 < num2.children.length; num3++) {
num2.children[num3].style.color = 'green'
}
})
let num1 = document.querySelector('.btn')
let num2 = document.querySelector('.two')
num1.addEventListener('click', function () {
// 1.查找下一个节点
num2.nextElementSibling.style.color = 'red'
// 2 查找上一个节点
num2.previousElementSibling.style.color = 'pink'
let num2 = document.createElement('li')
num2.innerHTML = '我是创建新节点/追加节点'
let num1 = document.querySelector('ul')
num1.appendChild(num2)
num1.insertBefore(num2, num1.children[0])
let data = [
{
src: 'images/course01.png',
title: 'Think PHP 5.0 博客系统实战项目演练',
num: 1125
}
let num2 = document.querySelector('ul')
for (let num1 = 0; num1 < data.length; num1++) {
let num3 = document.createElement('li')
num3.innerHTML = `
<img src=${data[num1].src} alt="">
<h4>
${data[num1].title}
</h4>
<div class="info">
<span>高级</span> • <span> ${data[num1].num}</span>人在学习
</div>
`
num2.appendChild(num3)
}
let num1 = document.querySelector('ul')
// 括号默认为false 则不克隆后代节点
// 若是true 则克隆后代
let num2 = num1.cloneNode(true)
document.body.appendChild(num2)
let num3 = document.querySelector('button')
let num4 = document.querySelector('ol')
num3.addEventListener('click', function () {
// 语法: 父元素.removeChild(子元素)
num4.removeChild(num4.children[0])
})
// 小括号为空 可获得当前时间
let num1 = new Date()
document.write(num1)
// 小括号写时间 可返回指定时间
let num2 = new Date('2023-3-31 00:00')
document.write(num2)
方法 | 作用 | 说明 |
---|---|---|
getFullYear() | 获得年份 | 获取四位年份 |
getMonth() | 获得月份 | 取值为0~11 |
getDate() | 获得月份中的每一天 | 不同月份取值也不同 |
getDay() | 获取星期 | 取值为0~6 |
getHours() | 获取小时 | 取值为0~23 |
getMinutes() | 获取分钟 | 取值为0~59 |
getSeconds() | 获取秒 | 取值为0~59 |
// 年月日
console.log(num1.getFullYear())
console.log(num1.getMonth() + 1)
console.log(num1.getDate())
console.log(num1.getDay())
// 时分秒
console.log(num1.getHours())
console.log(num1.getMinutes())
console.log(num1.getSeconds())
// 1. 显示时间案例
fn() // 先调用函数 省去1秒空白期
setInterval(fn, 1000)
function fn() {
// 实例化时间对象 写到定时器里才行
let arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
let num3 = new Date()
let n1 = num3.getFullYear()
let n2 = num3.getMonth() + 1
let n3 = num3.getDate()
let n4 = num3.getDay()
let n5 = num3.getHours()
let n6 = num3.getMinutes()
let n7 = num3.getSeconds()
let n8 = document.querySelector('.box')
n8.innerHTML = `今天是${n1}年${n2}月${n3}日 ${arr[n4]} ${n5}:${n6}:${n7}`
}
// 无需实例化
// 但是只能得到当前的时间戳, 而前面两种可以返回指定时间的时间戳
// 利用将来时间减 现在时间戳 = 剩余时间毫秒
// 1.getTime() 方法
let num1 = new Date()
document.write(num1.getTime())
// 2.new +Date()
document.write(+new Date()) // 当前时间戳
document.write(+new Date('2023-4-1 00:00:00')) // 指定时间
// 3.Date.now 只能得到当前
document.write(Date.now())
fn()
setInterval(fn, 1000)
function fn() {
// 1.获取当前时间戳
let n1 = +new Date()
// 2.获取指定时间戳
let n2 = +new Date('2023-4-1 00:00:00')
// 3.计算剩余毫秒 / 1000 = 剩余秒数
let n3 = (n2 - n1) / 1000
// console.log(n3)
// 4.转换时分秒
let h = parseInt(n3 / 60 / 60 % 24)
h = h < 10 ? '0' + h : h
let m = parseInt(n3 / 60 % 60)
m = m < 10 ? '0' + m : m
let s = parseInt(n3 % 60)
s = s < 10 ? '0' + s : s
// console.log(h, m, s)
let m1 = document.querySelector('#hour')
let m2 = document.querySelector('#minutes')
let m3 = document.querySelector('#scond')
m1.innerHTML = h
m2.innerHTML = m
m3.innerHTML = s
let m4 = document.querySelector('.next')
let m5 = document.querySelector('.tips')
let m6 = new Date()
let m7 = m6.getFullYear()
let m8 = m6.getMonth() + 1
let m9 = m6.getDate()
let m10 = m6.getHours()
let m11 = m6.getMinutes()
let m12 = m6.getSeconds()
m4.innerHTML = `今天是${m7}年${m8}月${m9}日`
m5.innerHTML = `现在是${m10}:${m11}:${m12}`
}
浏览器是如何进行界面渲染的:
let s = document.body.style
s.padding = '1px' // 重排 + 重绘
s.border = '1px solid red' // 重排 + 重绘
s.color = 'red' // 重绘
s.backgroundColor = '#000' // 重绘
s.fontSize = '14px' // 重排 + 重绘
let data = [
{ uname: '鲁班', imgSrc: './images/9.5/01.jpg' },
{ uname: '李白', imgSrc: './images/9.5/02.jpg' }
]
// 1. 检测用户输入字数
let text = document.querySelector('textarea')
let useCount = document.querySelector('.useCount')
let ul = document.querySelector('#list')
text.addEventListener('input', function () {
useCount.innerHTML = this.value.length
})
// 2. 发布内容不能为空
// 点击button后判断 内容为空 则提示不能输入为空 并直接return 不能为空
// 使用字符串.trim()去掉首尾空格
// 并将表单value值设置为空字符串 同时字数设置为0
let send = document.querySelector('#send')
send.addEventListener('click', function () {
if (text.value.trim() === '') {
text.value = ''
useCount.innerHTML = 0
return alert('内容不能为空')
}
// 4. 发布随机数
function fn(min, max) {
return Math.floor(Math.random() * (max - min + min) + min)
}
let fn1 = fn(0, data.length)
// 3. 新增留言
// 创建小li 通过innerHTML追加数据
// 随机获取数据数组内容 替换图片名字及留言内容
// 利用时间对象将时间动态化 new Date().toLocaleString()
let li = document.createElement('li')
li.innerHTML = `
<div class="info">
<img class="userpic" src=${data[fn1].imgSrc} />
<span class="username">${data[fn1].uname}</span>
<p class="send-time">发布于 ${new Date().toLocaleString()}</p>
</div>
<div class="content">${text.value}</div>
<span class="the_del">X</span>
`
// 5. 删除留言操作 放到追加的前面
// 在事件处理函数里获取点击按钮 注册点击事件
// 易错点: 必须在事件里获取 外面获取不到
// 放到追加ul的前面 创建元素同时顺便绑定了事件
let del = li.querySelector('.the_del')
del.addEventListener('click', function () {
ul.removeChild(li)
})
// 追加给ul 用父元素.insertBefore(子元素, 元素前面)
ul.insertBefore(li, ul.children[0])
// 6. 重置表单域内容为空
text.value = ''
useCount.innerHTML = 0
})