1.變量聲明
2 DOM介紹
2.1 什么是DOM
2.2 DOM樹
2.3 DOM對象(重要)
3.DOM(文檔對象模型)-獲取元素
3.1 獲取匹配的第一個元素
<!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>獲取DOM對象</title><style>.box {width: 200px;height: 200px;}</style>
</head>
<body>
<div class="box">123</div>
<p id="nav">abc</p>
<ul><li>1</li><li>2</li><li>3</li>
</ul>
<script>//1.獲取匹配的第一個類選擇器const box = document.querySelector(`div`) //標簽名const box1 = document.querySelector(`.box`) //類選擇器console.log(box)console.log(box1)//2.獲取匹配的第一個id選擇器const nav=document.querySelector(`#nav`)console.log(nav)//3.獲取匹配的第一個li選擇器const li=document.querySelector(`ul li:first-child`)console.log(li)
</script>
</body>
</html>
3.2 獲取匹配的多個元素
3.3 其他獲取DOM元素的方法
4.操作元素內容
4.1 對象.innerText屬性
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>操作元素內容(對象.innerText屬性)</title>
</head>
<body>
<div class="box">文檔內容</div>
<script>//1.獲取元素const box=document.querySelector(`.box`)// console.log(box)//2.修改文字內容 對象.innerText 屬性console.log(box.innerText) //獲取文字內容box.innerText=`div盒子` //修改文字內容,不解析標簽
</script>
</body>
</html>
4.2 對象.innerHTML屬性(常用)
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>操作元素內容(對象.innerHTML屬性)</title>
</head>
<body>
<div class="nav">文檔文字內容</div>
<script>const nav=document.querySelector(`.nav`) //獲取對象console.log(nav.innerHTML) //獲取文檔內容nav.innerHTML=`修改文檔內容` //修改文檔內容
</script>
</body>
</html>
5.修改元素常見的屬性
5.1 修改圖片元素常見屬性
<!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>修改元素常見的屬性</title>
</head>
<body>
<img src="../static/images/1.webp" alt="">
<script>//1.獲取圖片元素const img = document.querySelector(`img`)//2.修改圖片對象的屬性 ,對象.屬性=值img.src = "../static/images/2.webp"img.title="劉德華" //鼠標懸浮
</script>
</body>
</html>
隨機圖片
<!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>頁面刷新,圖片隨機更換</title>
</head>
<body>
<img src="../static/images/1.webp" alt="">
<script>//取得N~M的隨機整數function getRandom(N, M) {return Math.floor(Math.random() * (M - N + 1)) + N}//1.獲取對象const img = document.querySelector(`img`)//2.得到隨機序號const seq=getRandom(1,6)//3.修改對象屬性img.src = `../static/images/${seq}.webp`img.title="劉德華"
</script>
</body>
</html>
5.2 修改樣式元素屬性(style)
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>修改樣式元素屬性</title><style>.box{width: 200px;height: 200px;background-color: hotpink;}</style>
</head>
<body>
<div class="box"></div>
<script>//1.獲取元素const box=document.querySelector(`.box`)//2.修改樣式屬性 對象.style.樣式屬性=`值`,記得單位,之所以帶著style,是因為該代碼中的樣式在style元素中box.style.width=`300px`//多組單詞的采用小駝峰命名法box.style.backgroundColor=`blue` //background-color需要使用小駝峰命名法box.style.border=`2px solid lightpink`box.style.borderTop=`2px solid red` //上邊框樣式
</script>
</body>
</html>
隨機背景圖片
<!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>頁面刷新,頁面隨機更換背景圖片</title><style>body {background: url("../static/images/desktop_1.jpg") no-repeat top center/cover;}</style>
</head>
<body>
<div class="box"></div>
<script>//隨機生成N~M的整數function getRandom(N, M) {return Math.floor(Math.random() * (M - N + 1)) + N}//1.獲取對象,省略//2.獲取隨機整數const seq = getRandom(1, 10)//3.修改背景顏色document.body.style.backgroundImage = `url("../static/images/desktop_${seq}.jpg")`
</script>
</body>
</html>
5.3 修改樣式元素屬性(類名-className)
<!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>通過類名修改樣式</title><style>div {width: 200px;height: 200px;background-color: pink;}.nav {color: purple;}.box {width: 300px;height: 300px;background-color: skyblue;margin: 100px auto;padding: 10px;border: 1px solid #000;}</style>
</head>
<body>
<div class="nav"></div>
<script>//1.獲取元素const div = document.querySelector(`div`)//2.添加類名 class是個關鍵字,所以我們要使用classNamediv.className = `nav box` //注意:不用`.box`而是`box`,有多種類名的情況
</script>
</body>
</html>
5.4 修改樣式元素屬性(classList)(重點)
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>通過classList修改樣式</title><style>.box{width: 200px;height: 200px;background-color: skyblue;}.active{width: 300px;height: 300px;background-color: purple;}</style>
</head>
<body>
<div class="box active">文字</div>
<script>//通過classList來追加樣式//1.獲取對象const box=document.querySelector(`.box`)//2.修改樣式//2.1 修改樣式-追加類 add(``)類名不加點,并且是字符串// box.classList.add(`active`)//2.2 修改樣式-刪除類// box.classList.remove(`box`)//2.3 修改樣式-切換類 有-刪除,無-添加box.classList.toggle(`active`)
</script>
</body>
</html>
5.5 操作表單元素屬性
<!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>修改表單屬性</title>
</head>
<body>
<!--文本框-->
<!--<input type="text" value="計算機"> <!–value文本框的默認值–>-->
<hr>
<!--復選框-->
<input type="checkbox" name="" id="">
<!--當屬性和值一樣僅寫一個即可-->
<!--<button disabled="disabled">點擊</button>-->
<button disabled>點擊</button>
<script>// 文本框//1.獲取對象// const uname = document.querySelector(`input`)//2.操作對象屬性 獲取表單的值// console.log(uname.innerHTML) //innerHTML獲取不到表單內容// console.log(uname.value)//3.設置表單的值// uname.value=`計算機專業` //修改文本框中的默認值// uname.type=`password`// 復選框//1.獲取對象const checkbox = document.querySelector(`input`)console.log(checkbox.checked) //false//2.操作對象屬性checkbox.checked=true //加引號時,有隱式轉換//按鈕隱藏//1.獲取對象const button=document.querySelector(`button`)console.log(button.disabled) //默認false,不禁用
</script>
</body>
</html>
5.6 自定義屬性
<!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>自定義屬性</title>
</head>
<body>
<!--自定義屬性:data-屬性名:屬性名前綴必須加上,而屬性名可以自定義命名-->
<div data-id="1" data-seq="自定義屬性">1</div>
<div data-id="2">2</div>
<div data-id="3">3</div>
<div data-id="4">4</div>
<div data-id="5">5</div><script>//1.獲取對象const div = document.querySelector(`div`)//2.操作對象屬性console.log(div.dataset.id) //data-id屬性的值console.log(div.dataset.seq) //data-seq屬性的值
</script>
</body>
</html>
6.定時器-間歇函數
<!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>定時器-間歇函數</title><style>* {box-sizing: border-box;}.slider {width: 560px;height: 400px;overflow: hidden;}.slider-wrapper {width: 100%;height: 320px;}.slider-wrapper img {width: 100%;height: 100%;display: block;}.slider-footer {height: 80px;background-color: rgb(100, 67, 68);padding: 12px 12px 0 12px;position: relative;}.slider-footer .toggle {position: absolute;right: 0;top: 12px;display: flex;}.slider-footer .toggle button {margin-right: 12px;width: 28px;height: 28px;appearance: none;border: none;background: rgba(255, 255, 255, 0.1);color: #fff;border-radius: 4px;cursor: pointer;}.slider-footer .toggle button:hover {background: rgba(255, 255, 255, 0.2);}.slider-footer p {margin: 0;color: #fff;font-size: 18px;margin-bottom: 10px;}.slider-indicator {margin: 0;padding: 0;list-style: none;display: flex;align-items: center;}.slider-indicator li {width: 8px;height: 8px;margin: 4px;border-radius: 50%;background: #fff;opacity: 0.4;cursor: pointer;}.slider-indicator li.active {width: 12px;height: 12px;opacity: 1;}</style>
</head>
<body>
<div class="slider"><div class="slider-wrapper"><img src="../static/images/slider01.jpg" alt=""/></div><div class="slider-footer"><p>對人類來說會不會太超前了?</p><ul class="slider-indicator"><li class="active"></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><div class="toggle"><button class="prev"><</button><button class="next">></button></div></div>
</div><script>//setInterval(函數,間歇時間)// setInterval(function(){console.log(`1秒執行一次`)},1000)/*function fn() {console.log(`1秒執行一次`)}let n = setInterval(fn, 3000)console.log(n)// setInterval(fn,1000) //注意:此處的函數名僅僅時函數名,而不加()// setInterval(`fn`,1000) //注意:此處的函數名可以使用,但極為少見let m = setInterval(function () {console.log(11)}, 2000)console.log(m)clearInterval(m) */ //關閉定時器,關閉變量名為m帶的定時器// 1. 初始數據const sliderData = [{ url: '../static/images/slider01.jpg', title: '對人類來說會不會太超前了?', color: 'rgb(100, 67, 68)' },{ url: '../static/images/slider02.jpg', title: '開啟劍與雪的黑暗傳說!', color: 'rgb(43, 35, 26)' },{ url: '../static/images/slider03.jpg', title: '真正的jo廚出現了!', color: 'rgb(36, 31, 33)' },{ url: '../static/images/slider04.jpg', title: '李玉剛:讓世界通過B站看到東方大國文化', color: 'rgb(139, 98, 66)' },{ url: '../static/images/slider05.jpg', title: '快來分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },{ url: '../static/images/slider06.jpg', title: '嗶哩嗶哩小年YEAH', color: 'rgb(166, 131, 143)' },{ url: '../static/images/slider07.jpg', title: '一站式解決你的電腦配置問題!!!', color: 'rgb(53, 29, 25)' },{ url: '../static/images/slider08.jpg', title: '誰不想和小貓咪貼貼呢!', color: 'rgb(99, 72, 114)' },]//1.獲取元素const img = document.querySelector(`.slider-wrapper img`)const p = document.querySelector(`.slider-footer p`)let i = 0//2.開啟定時器setInterval(function () {i++//無縫銜接位置if(i>=sliderData.length){i=0}//更換圖片路徑img.src = sliderData[i].url//把字寫到p里面p.innerHTML = sliderData[i].title//小圓點//1.先刪除之前的activedocument.querySelector(`.slider-indicator .active`).classList.remove(`active`)//只讓當前li,添加activedocument.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add(`active`)}, 1000)
</script>
</body>
</html>
7.事件監聽(綁定)
7.1 事件監聽
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>監聽事件-關閉廣告</title><style>.box {position: relative;width: 1000px;height: 200px;background-color: pink;margin: 100px auto;text-align: center;font-size: 50px;line-height: 200px;font-weight: 700;}.box1{position: absolute;right: 20px;top: 10px;width: 20px;height: 20px;background-color: skyblue;text-align: center;line-height: 20px;font-size: 16px;cursor: pointer;}</style>
</head>
<body>
<div class="box">心飛揚,透心涼<div class="box1">X</div>
</div>
<script>//1.事件源const box1=document.querySelector(`.box1`)//關閉的是大盒子const box=document.querySelector(`.box`)//2.事件類型(事件監聽)box1.addEventListener(`click`,function(){box.style.display=`none`})//3.事件處理程序
</script>
</body>
</html>
綜合練習:隨機點名
<!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>隨機點名案例</title><style>* {margin: 0;padding: 0;}h2 {text-align: center;}.box {width: 600px;margin: 50px auto;display: flex;font-size: 25px;line-height: 40px;}.qs {width: 450px;height: 40px;color: red;}.btns {text-align: center;}.btns button {width: 120px;height: 35px;margin: 0 50px;}</style>
</head>
<body>
<h2>隨機點名</h2>
<div class="box"><span>名字是:</span><div class="qs">這里顯示姓名</div>
</div>
<div class="btns"><button class="start">開始</button><button class="end">結束</button>
</div><script>// 數據數組const arr = ['甄嬛', '沈眉莊', '安陵容', '烏拉那拉氏', '瑾汐',`流朱`]// 定時器的全局變量let timerId = 0// 隨機號要全局變量let random = 0// 業務1.開始按鈕模塊const qs = document.querySelector('.qs')// 1.1 獲取開始按鈕對象const start = document.querySelector('.start')// 1.2 添加點擊事件start.addEventListener('click', function () {timerId = setInterval(function () {// 隨機數random = parseInt(Math.random() * arr.length)// console.log(arr[random])qs.innerHTML = arr[random]}, 35)// 如果數組里面只有一個值了,還需要抽取嗎? 不需要 讓兩個按鈕禁用就可以if (arr.length === 1) {// start.disabled = true// end.disabled = truestart.disabled = end.disabled = true}})// 2. 關閉按鈕模塊const end = document.querySelector('.end')end.addEventListener('click', function () {clearInterval(timerId)// 結束了,可以刪除掉當前抽取的那個數組元素arr.splice(random, 1)console.log(arr)})
</script>
</body>
</html>
7.2 事件監聽版本
7.3 事件類型
7.3.1 鼠標事件
<!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>事件類型</title><style>div {width: 200px;height: 200px;background-color: pink;}</style>
</head>
<body>
<div></div>
<script>const div = document.querySelector(`div`)//鼠標經過div.addEventListener(`mouseenter`,function (){// alert(`鼠標經過`)console.log(`鼠標經過`)})//鼠標離開div.addEventListener(`mouseleave`,function (){// alert(`鼠標離開`)console.log(`鼠標離開`)})
</script>
</body>
</html>
綜合練習:鼠標事件-輪播圖
<!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>事件類型-輪播圖點擊切換</title><style>* {box-sizing: border-box;}.slider {width: 560px;height: 400px;overflow: hidden;}.slider-wrapper {width: 100%;height: 320px;}.slider-wrapper img {width: 100%;height: 100%;display: block;}.slider-footer {height: 80px;background-color: rgb(100, 67, 68);padding: 12px 12px 0 12px;position: relative;}.slider-footer .toggle {position: absolute;right: 0;top: 12px;display: flex;}.slider-footer .toggle button {margin-right: 12px;width: 28px;height: 28px;appearance: none;border: none;background: rgba(255, 255, 255, 0.1);color: #fff;border-radius: 4px;cursor: pointer;}.slider-footer .toggle button:hover {background: rgba(255, 255, 255, 0.2);}.slider-footer p {margin: 0;color: #fff;font-size: 18px;margin-bottom: 10px;}.slider-indicator {margin: 0;padding: 0;list-style: none;display: flex;align-items: center;}.slider-indicator li {width: 8px;height: 8px;margin: 4px;border-radius: 50%;background: #fff;opacity: 0.4;cursor: pointer;}.slider-indicator li.active {width: 12px;height: 12px;opacity: 1;}</style>
</head>
<body>
<div class="slider"><div class="slider-wrapper"><img src="../static/images/slider01.jpg" alt=""/></div><div class="slider-footer"><p>對人類來說會不會太超前了?</p><ul class="slider-indicator"><li class="active"></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><div class="toggle"><button class="prev"><</button><button class="next">></button></div></div>
</div>
<script>// 1. 初始數據const data = [{url: '../static/images/slider01.jpg', title: '對人類來說會不會太超前了?', color: 'rgb(100, 67, 68)'},{url: '../static/images/slider02.jpg', title: '開啟劍與雪的黑暗傳說!', color: 'rgb(43, 35, 26)'},{url: '../static/images/slider03.jpg', title: '真正的jo廚出現了!', color: 'rgb(36, 31, 33)'},{url: '../static/images/slider04.jpg', title: '李玉剛:讓世界通過B站看到東方大國文化', color: 'rgb(139, 98, 66)'},{url: '../static/images/slider05.jpg', title: '快來分享你的寒假日常吧~', color: 'rgb(67, 90, 92)'},{url: '../static/images/slider06.jpg', title: '嗶哩嗶哩小年YEAH', color: 'rgb(166, 131, 143)'},{url: '../static/images/slider07.jpg', title: '一站式解決你的電腦配置問題!!!', color: 'rgb(53, 29, 25)'},{url: '../static/images/slider08.jpg', title: '誰不想和小貓咪貼貼呢!', color: 'rgb(99, 72, 114)'},]// 獲取元素const img = document.querySelector('.slider-wrapper img')const p = document.querySelector('.slider-footer p')const footer = document.querySelector('.slider-footer')// 1. 右按鈕業務// 1.1 獲取右側按鈕const next = document.querySelector('.next')let i = 0 // 信號量 控制播放圖片張數// 1.2 注冊點擊事件next.addEventListener('click', function () {// console.log(11)i++// 1.6判斷條件 如果大于8 就復原為 0// if (i >= 8) {// i = 0// }i = i >= data.length ? 0 : i// 1.3 得到對應的對象// console.log(data[i])// 調用函數toggle()})// 2. 左側按鈕業務// 2.1 獲取左側按鈕const prev = document.querySelector('.prev')// 1.2 注冊點擊事件prev.addEventListener('click', function () {i--// 判斷條件 如果小于0 則爬到最后一張圖片索引號是 7// if (i < 0) {// i = 7// }i = i < 0 ? data.length - 1 : i// 1.3 得到對應的對象// console.log(data[i])// 調用函數toggle()})// 聲明一個渲染的函數作為復用function toggle() {// 1.4 渲染對應的數據img.src = data[i].urlp.innerHTML = data[i].titlefooter.style.backgroundColor = data[i].color// 1.5 更換小圓點 先移除原來的類名, 當前li再添加 這個 類名document.querySelector('.slider-indicator .active').classList.remove('active')document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')}// 3. 自動播放模塊let timerId = setInterval(function () {// 利用js自動調用點擊事件 click() 一定加小括號調用函數next.click()}, 1000)// 4. 鼠標經過大盒子,停止定時器const slider = document.querySelector('.slider')// 注冊事件slider.addEventListener('mouseenter', function () {// 停止定時器clearInterval(timerId)})// 5. 鼠標離開大盒子,開啟定時器// 注冊事件slider.addEventListener('mouseleave', function () {// 停止定時器if (timerId) clearInterval(timerId)// 開啟定時器timerId = setInterval(function () {// 利用js自動調用點擊事件 click() 一定加小括號調用函數next.click()}, 1000)})
</script>
</body>
</html>
7.3.2 焦點事件
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>事件類型-焦點事件</title>
</head>
<body>
<input type="text">
<script>const input=document.querySelector(`input`)input.addEventListener(`focus`,function (){console.log(`有焦點觸發`)})input.addEventListener(`blur`,function (){console.log(`失去焦點觸發`)})
</script>
</body>
</html>
7.3.3 鍵盤事件
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>事件類型-鍵盤事件</title>
</head>
<body>
<input type="text">
<script>const input=document.querySelector(`input`)input.addEventListener(`keydown`,function (){console.log(`鍵盤按下`)})input.addEventListener(`keyup`,function (){console.log(`鍵盤彈起`)})
</script>
</body>
</html>
7.3.4 文本事件
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>事件類型-文本事件</title>
</head>
<body>
<input type="text">
<script>const input=document.querySelector(`input`)input.addEventListener(`input`,function(){console.log(input.value)})
</script>
</body>
</html>
綜合練習:評論回車發布
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>評論回車發布</title><style>.wrapper {min-width: 400px;max-width: 800px;display: flex;justify-content: flex-end;}.avatar {width: 48px;height: 48px;border-radius: 50%;overflow: hidden;background: url(../static/images_webApis/avatar.jpg) no-repeat center / cover;margin-right: 20px;}.wrapper textarea {outline: none;border-color: transparent;resize: none;background: #f5f5f5;border-radius: 4px;flex: 1;padding: 10px;transition: all 0.5s;height: 30px;}.wrapper textarea:focus {border-color: #e4e4e4;background: #fff;height: 50px;}.wrapper button {background: #00aeec;color: #fff;border: none;border-radius: 4px;margin-left: 10px;width: 70px;cursor: pointer;}.wrapper .total {margin-right: 80px;color: #999;margin-top: 5px;opacity: 0;transition: all 0.5s;}.list {min-width: 400px;max-width: 800px;display: flex;}.list .item {width: 100%;display: flex;}.list .item .info {flex: 1;border-bottom: 1px dashed #e4e4e4;padding-bottom: 10px;}.list .item p {margin: 0;}.list .item .name {color: #FB7299;font-size: 14px;font-weight: bold;}.list .item .text {color: #333;padding: 10px 0;}.list .item .time {color: #999;font-size: 12px;}</style>
</head>
<body>
<div class="wrapper"><i class="avatar"></i><textarea id="tx" placeholder="發一條友善的評論" rows="2" maxlength="200"></textarea><button>發布</button>
</div>
<div class="wrapper"><span class="total">0/200字</span>
</div>
<div class="list"><div class="item" style="display: none;"><i class="avatar"></i><div class="info"><p class="name">清風徐來</p><p class="text">大家都辛苦啦,感謝各位大大的努力,能圓滿完成真是太好了[笑哭][支持]</p><p class="time">2022-10-10 20:29:21</p></div></div>
</div>
<script>const tx = document.querySelector('#tx')const total = document.querySelector('.total')// 1. 當我們文本域獲得了焦點,就讓 total 顯示出來tx.addEventListener('focus', function () {total.style.opacity = 1})// 2. 當我們文本域失去了焦點,就讓 total 隱藏出來tx.addEventListener('blur', function () {total.style.opacity = 0})// 3. 檢測用戶輸入tx.addEventListener('input', function () {// console.log(tx.value.length) 得到輸入的長度total.innerHTML = `${tx.value.length}/200字`})// const str = 'andy'// console.log(str.length)
</script>
</body>
</html>
7.4 事件對象
7.4.1 獲取事件對象
<!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>事件對象-獲取事件對象</title>
</head>
<body>
<button>點擊</button>
<script>const btn = document.querySelector(`button`)//function(e){}:e/ev/event為事件對象btn.addEventListener(`click`, function (ev) {console.log(ev)})
</script>
</body>
</html>
7.4.2 事件對象常用屬性
對象屬性詳細內容見于:mdn官網
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>事件對象-事件對象常用的屬性</title>
</head>
<body>
<input type="text">
<script>const input=document.querySelector(`input`)//實現僅點擊回車鍵才可以進行觸發input.addEventListener(`keyup`,function(ev){// console.log(ev)//獲取具體點擊的鍵值// console.log(ev.key)//實現僅點擊回車鍵,進行發布新聞或評論if(ev.key===`Enter`){console.log(`點擊回車鍵(Enter)發布按鈕`)}})
</script>
</body>
</html>
綜合練習:點擊回車發布評論
<!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>事件對象-點擊回車發布評論</title><style>.wrapper {min-width: 400px;max-width: 800px;display: flex;justify-content: flex-end;}.avatar {width: 48px;height: 48px;border-radius: 50%;overflow: hidden;background: url(../static/images_webApis/avatar.jpg) no-repeat center / cover;margin-right: 20px;}.wrapper textarea {outline: none;border-color: transparent;resize: none;background: #f5f5f5;border-radius: 4px;flex: 1;padding: 10px;transition: all 0.5s;height: 30px;}.wrapper textarea:focus {border-color: #e4e4e4;background: #fff;height: 50px;}.wrapper button {background: #00aeec;color: #fff;border: none;border-radius: 4px;margin-left: 10px;width: 70px;cursor: pointer;}.wrapper .total {margin-right: 80px;color: #999;margin-top: 5px;opacity: 0;transition: all 0.5s;}.list {min-width: 400px;max-width: 800px;display: flex;}.list .item {width: 100%;display: flex;}.list .item .info {flex: 1;border-bottom: 1px dashed #e4e4e4;padding-bottom: 10px;}.list .item p {margin: 0;}.list .item .name {color: #FB7299;font-size: 14px;font-weight: bold;}.list .item .text {color: #333;padding: 10px 0;}.list .item .time {color: #999;font-size: 12px;}</style>
</head>
<body>
<div class="wrapper"><i class="avatar"></i><textarea id="tx" placeholder="發一條友善的評論" rows="2" maxlength="200"></textarea><button>發布</button>
</div>
<div class="wrapper"><span class="total">0/200字</span>
</div>
<div class="list"><div class="item" style="display: none;"><i class="avatar"></i><div class="info"><p class="name">星夢清河</p><p class="text">大家都辛苦啦,感謝各位大大的努力,能圓滿完成真是太好了[笑哭][支持]</p><p class="time">2022-10-10 20:29:21</p></div></div>
</div><script>const tx = document.querySelector('#tx')const total = document.querySelector('.total')const item = document.querySelector('.item')const text = document.querySelector('.text')const time = document.querySelector(`.time`)// 1. 當我們文本域獲得了焦點,就讓 total 顯示出來tx.addEventListener('focus', function () {total.style.opacity = 1})// 2. 當我們文本域失去了焦點,就讓 total 隱藏出來tx.addEventListener('blur', function () {total.style.opacity = 0})// 3. 檢測用戶輸入tx.addEventListener('input', function () {// console.log(tx.value.length) 得到輸入的長度total.innerHTML = `${tx.value.length}/200字`})// 4. 按下回車發布評論tx.addEventListener('keyup', function (e) {// 只有按下的是回車鍵,才會觸發// console.log(e.key)if (e.key === 'Enter') {// 如果用戶輸入的不為空就顯示和打印if (tx.value.trim()) {// console.log(11)item.style.display = 'block'// console.log(tx.value) // 用戶輸入的內容text.innerHTML = tx.valueconst date = new Date()const y = date.toLocaleDateString() //年/月/日const hours = date.getHours() //時const minutes = date.getMinutes() //分const seconds = date.getSeconds() //秒const time1 = y + " " + hours + ":" + minutes + ":" + secondstime.innerHTML = time1}// 等我們按下回車,結束,清空文本域tx.value = ''// 按下回車之后,就要把 字符統計 復原total.innerHTML = '0/200字'}})
</script>
</body>
</html>
7.5 環境對象
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>環境對象</title>
</head>
<body>
<button>點擊</button>
<script>//每個函數中都有this,函數對象//普通函數中的this,指的是window/*function fn(){console.log(this)}window.fn() //調用函數fn()fn() //調用函數fn()*///1.獲取事件const btn=document.querySelector(`button`)//2.綁定事件btn.addEventListener(`click`,function fn(){console.log(this)// btn.style.color=`red`this.style.color=`red` //this表示該對象})
</script>
</body>
</html>
7.6 回調函數
綜合練習:Tab切換
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>Tab欄切換</title><style>* {margin: 0;padding: 0;}.tab {width: 590px;height: 340px;margin: 20px;border: 1px solid #e4e4e4;}.tab-nav {width: 100%;height: 60px;line-height: 60px;display: flex;justify-content: space-between;}.tab-nav h3 {font-size: 24px;font-weight: normal;margin-left: 20px;}.tab-nav ul {list-style: none;display: flex;justify-content: flex-end;}.tab-nav ul li {margin: 0 20px;font-size: 14px;}.tab-nav ul li a {text-decoration: none;border-bottom: 2px solid transparent;color: #333;}.tab-nav ul li a.active {border-color: #e1251b;color: #e1251b;}.tab-content {padding: 0 16px;}.tab-content .item {display: none;}.tab-content .item.active {display: block;}</style>
</head>
<body>
<div class="tab"><div class="tab-nav"><h3>每日特價</h3><ul><li><a class="active" href="javascript:;">精選</a></li><li><a href="javascript:;">美食</a></li><li><a href="javascript:;">百貨</a></li><li><a href="javascript:;">個護</a></li><li><a href="javascript:;">預告</a></li></ul></div><div class="tab-content"><div class="item active"><img src="../static/images_webApis/tab00.png" alt="" /></div><div class="item"><img src="../static/images_webApis/tab01.png" alt="" /></div><div class="item"><img src="../static/images_webApis/tab02.png" alt="" /></div><div class="item"><img src="../static/images_webApis/tab03.png" alt="" /></div><div class="item"><img src="../static/images_webApis/tab04.png" alt="" /></div></div>
</div>
<script>// 1. a 模塊制作 要給 5個鏈接綁定鼠標經過事件// 1.1 獲取 a 元素const as = document.querySelectorAll('.tab-nav a')// console.log(as)for (let i = 0; i < as.length; i++) {// console.log(as[i])// 要給 5個鏈接綁定鼠標經過事件as[i].addEventListener('mouseenter', function () {// console.log('鼠標經過')// 排他思想// 干掉別人 移除類activedocument.querySelector('.tab-nav .active').classList.remove('active')// 我登基 我添加類 active this 當前的那個 athis.classList.add('active')// 下面5個大盒子 一一對應 .item// 干掉別人document.querySelector('.tab-content .active').classList.remove('active')// 對應序號的那個 item 顯示 添加 active 類document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')})}
</script>
</body>
</html>
綜合練習:表單全選反選案例
8.事件流
8.1 事件流和兩個階段說明
8.2 事件捕獲
<!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>事件流-事件捕獲</title><style>.father {width: 150px;height: 150px;background-color: #0099cc;}.son {width: 100px;height: 100px;background-color: #404060;}</style>
</head>
<body>
<div class="father"><div class="son"></div>
</div>
<script>const fa=document.querySelector(`.father`)const son=document.querySelector(`.son`)//省---市---縣 (大--->小) 捕獲//縣---市---省 (小--->大) 冒泡//以上轉換成標簽嵌套//以下是同類型事件,均為clickdocument.addEventListener(`click`,function fn(){alert("我是爺爺")},true)fa.addEventListener(`click`,function fn(){alert("我是兒子"),true})son.addEventListener(`click`,function fn(){alert("我是孫子"),true})//爺爺---兒子---孫子
</script>
</body>
</html>
8.3 事件冒泡
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>事件流-事件冒泡</title><style>.father {width: 150px;height: 150px;background-color: #0099cc;}.son {width: 100px;height: 100px;background-color: #404060;}</style>
</head>
<body>
<div class="father"><div class="son"></div>
</div>
<script>const fa=document.querySelector(".father")const son=document.querySelector(".son")//縣---市---省 (小--->大) 冒泡//以下是同類型事件,均為clickdocument.addEventListener(`click`,function fn(){alert("我是爺爺")})fa.addEventListener(`click`,function fn(){alert("我是兒子")})son.addEventListener(`click`,function fn(){alert("我是孫子")})
</script>
</body>
</html>
8.4 阻止冒泡
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>事件流-阻止冒泡或捕獲</title><style>.father {width: 150px;height: 150px;background-color: #0099cc;}.son {width: 100px;height: 100px;background-color: #404060;}</style>
</head>
<body>
<div class="father"><div class="son"></div>
</div>
<script>const fa=document.querySelector(".father")const son=document.querySelector(".son")//縣---市---省 (小--->大) 冒泡//以下是同類型事件,均為clickdocument.addEventListener(`click`,function fn(){alert("我是爺爺")})fa.addEventListener(`click`,function fn(){alert("我是兒子")})son.addEventListener(`click`,function fn(e){alert("我是孫子")e.stopPropagation() //阻止冒泡或捕獲})
</script>
</body>
</html>
8.5 解綁事件
<!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>事件流-事件解綁</title>
</head>
<body>
<button>點擊</button>
<script>//獲取按鈕const btn = document.querySelector("button")//綁定事件:點擊按鈕,出現彈窗/* btn.onclick = function () {alert("綁定事件")// btn.οnclick=null //可進行點擊一次后,進行解綁事件}//L0 事件解綁btn.onclick = null //類型給btn.onclick重新賦值為空對象*/btn.addEventListener("click",fn)//L2 事件解綁btn.removeEventListener("click",fn)function fn(){alert("事件")}
</script>
</body>
</html>
8.6 鼠標經過事件的區別
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>事件流-鼠標經過流</title><style>.father{width: 300px;height: 300px;background: #999999;}.son{width: 200px;height: 200px;background-color: #e1251b;}</style>
</head>
<body>
<div class="father"><div class="son"></div>
</div>
<script>const fa=document.querySelector(".father")const son=document.querySelector(".son")fa.addEventListener("mouseenter",function fn (){alert("鼠標經過")})fa.addEventListener("mouseleave",function fn(){alert("鼠標離開")})// son.addEventListener("mouseout",function fn(){// alert("son")// })
</script>
</body>
</html>
8.7 注冊事件的區別
9.事件委托
9.1 事件委托到父級
<!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>事件委托</title>
</head>
<body>
<ul><li>第1個孩子</li><li>第2個孩子</li><li>第3個孩子</li><li>第4個孩子</li><li>第5個孩子</li><p>不變色</p>
</ul>
<script>//點擊每個li,使點擊到的li變成紅色//使用事件委托的方式,委托給了父級,事件寫到父級身上//1.獲取父級元素const ul = document.querySelector("ul")//2.綁定事件ul.addEventListener(`click`,function(e) {// this.style.color="red"// console.log(e.target) //點擊的那個對象// console.dir(e.target) //對象的所有屬性// e.target.style.color='red'if(e.target.tagName==="LI"){ //注意:tagName的值要大寫e.target.style.color='red'}})
</script>
</body>
</html>
9.2 阻止元素默認行為
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>事件委托-阻止元素默認行為</title>
</head>
<body>
<form action="https://www.baidu.com/"><input type="submit" value="提交">
</form>
<a href="https://www.baidu.com"/>
<script>const form=document.querySelector("form")form.addEventListener("submit",function (e){//阻止默認事件e.preventDefault()})const a=document.querySelector("a")a.addEventListener("submit",function (e){//阻止元素默認行為e.preventDefault()})</script>
</body>
</html>
10.其他事件
10.1 頁面加載事件
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>其他事件-頁面加載事件</title><script>//等待頁面“所有資源(標簽+圖片等內容)”加載完畢,就會去執行加載元素(該window中加載的方法最后執行)/* window.addEventListener("load",function(){const btn = document.querySelector("button")btn.addEventListener("click",function(){alert("頁面加載事件")})})*//*img.addEventListener("load",function(){//等待圖片資源加載完成后,再去加載此處內容})*///等待頁面標簽加載完畢,就會去執行加載此處方法document.addEventListener("DOMContentLoaded",function (){const btn = document.querySelector("button")btn.addEventListener("click",function(){alert("頁面加載事件")})})</script>
</head>
<body>
<button>點擊</button>
</body>
</html>
10.2 元素滾動事件
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>其他事件-元素滾動事件</title><style>body{padding-top: 100px;height: 3000px;}div{margin: 100px;overflow: scroll;width: 210px;height: 200px;border: 1px solid #000;}</style><!--<script>//window加scrollwindow.addEventListener('load',function(){window.addEventListener('scroll',function(){console.log("頁面滾動")})})</script>-->
</head>
<body>
<div>心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!心中有信仰,腳下有力量!
</div><script>/*window.addEventListener('scroll',function(){console.log("頁面滾動")})*/const div=document.querySelector("div")div.addEventListener('scroll',function (){// console.log("頁面滾動")// scrollTop 被卷去的頭部,頁面滾動了多少像素,crollTopconsole.log(div.scrollTop);//獲取html元素寫法var n = document.documentElement.scrollTop;if(n>=100){div.style.display='block'}else{div.style.display='none'}})
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>頁面滾動事件</title><style>body{height: 3000px;}</style>
</head>
<body>
<script>document.documentElement.scrollTop=800window.addEventListener('scroll',function(){// console.log(document.documentElement.scrollTop)//必須寫到里面const n=document.documentElement.scrollTop//得到是什么數據 數字型 不帶單位console.log(n)})
</script>
</body>
</html>
10.3 頁面尺寸事件
11.元素尺寸與位置
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>元素尺寸與位置</title><style>div{position: relative;width: 200px;height: 200px;background-color: #e1251b;margin: 100px;}p{width: 100px;height: 100px;background-color: pink;margin: 50px;}</style>
</head>
<body>
<div></div>
<p></p>
<script>const div=document.querySelector("div")const p=document.querySelector("p")
// 檢測盒子的位置,最近一級帶有定位的祖先元素console.log(div.offsetLeft);console.log(p.offsetLeft)
</script>
</body>
</html>
12.日期對象
12.1 實例化
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>日期對象-實例化</title>
</head>
<body>
<script>//1.獲取當前時間 new是實例化象征const date=new Date()console.log(date)//2.獲取指定時間,用于倒計時const date2=new Date("2024-2-25 08:30:00")console.log(date2)
</script>
</body>
</html>
12.2 事件對象方法
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>日期對象-時間對象方法</title>
</head>
<body>
<script>const date=new Date()//1.獲取年份console.log(date.getFullYear())//2.獲取月份console.log(date.getMonth()+1)//3.獲取月份中的第幾天console.log(date.getDate()+1)//4.星期幾console.log(date.getDay())//5.時console.log(date.getHours())//6.分console.log(date.getMinutes())//7.秒console.log(date.getSeconds())
</script>
</body>
</html>
12.3 時間戳
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>日期對象-時間戳</title>
</head>
<body>
<script>const date=new Date()//1.方法一:getTime()console.log(date.getTime());//2.方法二:new Dateconsole.log(+new Date());//獲取指定時間戳console.log("指定時間戳:"+ +new Date("2024.02.28 12:20:22"))//3.方法三:date.now()console.log(Date.now());//獲取星期XXconst arr=['星期日','星期一','星期二','星期三','星期四','星期五','星期六']console.log(arr[new Date().getDay()])
</script>
</body>
</html>
13.節點操作
13.1 DOM節點
13.2 查找節點
13.2.1 父節點查找
<!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>節點查找-父節點查找</title>
</head>
<body>
<div class="grandfather"><div class="dad"><div class="baby"></div></div>
</div>
<script>const baby = document.querySelector(".baby")console.log(baby) //babyconsole.log(baby.parentNode) // dad,只能得到最后一級console.log(baby.parentNode.parentNode) //grandfather
</script>
</body>
</html>
13.2.2 子節點查找
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>節點查找-子節點查找</title>
</head>
<body>
<ul><li><p>第一段</p></li><li></li><li></li><li></li><li></li><li></li>
</ul>
<script>const ul=document.querySelector("ul")console.log(ul.children)
</script>
</body>
</html>
13.2.3 兄弟節點
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>節點查找-兄弟節點查找</title>
</head>
<body>
<ul><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li>
</ul>
<script>const li2=document.querySelector("ul li:nth-child(2)")console.log(li2.previousElementSibling) //上一個兄弟console.log(li2.nextElementSibling) //下一個兄弟
</script>
</body>
</html>
13.3 增加節點
13.3.1 創建節點
13.3.2 追加節點
<!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>增加節點-創建節點</title>
</head>
<body>
<ul><li>1</li>
</ul>
<script>//1.創建節點const div = document.createElement("div")// console.log(div)document.body.appendChild(div)const ul = document.querySelector("ul")const li = document.createElement("li")//2.追加節點1,作為最后一個子元素li.innerHTML = "小麗"// ul.appendChild(li)//3.追加節點2,作為第一個元素//insertBefore(放哪個元素,放到哪里)ul.insertBefore(li,ul.children[0])
</script>
</body>
</html>
13.4 刪除節點
14.M端事件
<!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>M端事件</title><style>div {width: 300px;height: 300px;background-color: pink;}</style>
</head>
<body>
<div></div>
<script>const div = document.querySelector("div")//1.觸摸div.addEventListener("touchstart", function () {console.log("觸摸")})//2.離開div.addEventListener("touchend",function(){console.log("離開")})//3.移動div.addEventListener("touchmove",function(){console.log("移動")})
</script>
</body>
</html>
15.JS插件
16.Window對象
16.1 BOM(瀏覽器對象模型)
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>window-BOM</title>
</head>
<body>
<script>console.log(document===window.document)function fn(){alert("window-BOM")}window.fn()var num=10console.log(window.num)console.log(num)
</script>
</body>
</html>
16.2 定時器-延時函數
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>window-延時定時器</title>
</head>
<body>
<script>setTimeout(function(){console.log("時間到啦!!!"),100000})
</script>
</body>
</html>
16.3 JS執行機制
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>js機制</title>
</head>
<body>
<script>//輸出結果:1,2,4,3console.log(1)console.log(2)setTimeout(function fn(){console.log(3)},1000)console.log(4)
</script>
</body>
</html>
16.4 location對象
<!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>window-location</title><style>span {color: red;}</style>
</head>
<body>
<a href="http://www.baidu.com">百度<span>5</span>秒后打開界面</a>
<script>/*console.log(window.location)console.log(location)console.log(location.href)*///經常使用href,js的方法去跳轉頁面// location.href="http://www.baidu.com"//1.獲取元素const a = document.querySelector("a")//2.開啟定時器//3.聲明倒計時變量let num = 5let timeId = setInterval(function () {num--a.innerHTML = "百度<span>${num}</span>秒后打開界面"//如果num===0,則停止定時器,并且完成跳轉功能if (num === 0) {clearInterval(timeId)//4.跳轉location.hreflocation.href = "http://www.baidu.com"}}, 1000)</script>
</body>
</html>
16.5 navigator對象
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>nabigator</title>
</head>
<body>
這是PC端的頁面
<script>//檢測userAgent(瀏覽器信息)!(function (){const userAgent=navigator.userAgent//驗證是否為Android或iPhoneconst android=userAgent.match(/(Android);?[\s\/]+([\d.]+)?/)const iphone=userAgent.match(/(iPhone\sOS)\s([\d_]+)/)//如果是Android或iPhone,則跳轉至移動站點if(android||iphone){location.href="http://www.baidu.com"}})()
</script>
</body>
</html>
16.6 histroy對象
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>history</title>
</head>
<body>
<button>前進</button>
<button>后退</button>
<script>const back=document.querySelector("button:first-child")const forward=back.nextElementSiblingback.addEventListener("click",function(){//后退一步// history.back()history.go(-1)})forward.addEventListener("click",function(){//前進一步// history.forward()history.go(1)})
</script>
</body>
</html>
17.本地存儲
17.1 本地存儲介紹
17.2 本地存儲分類
17.2.1 本地存儲分類-localStorage
關閉瀏覽器不會消失
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>瀏覽器本地存儲-localStorage</title>
</head>
<body>
<script>//本地存儲,存儲的都是字符串類型//1.要存儲一個名字uname,chenchen//localStorage.setItem('鍵','值')localStorage.setItem("uname","chenchen")//2.獲取localStorage.getItem("uname")//3.刪除本地存儲,只刪除值localStorage.removeItem("uname")//4.修改,當本地存儲,存儲的有該字段則為修改,否則為增加localStorage.setItem("uname","cc")console.log(localStorage.getItem("uname"))
</script>
</body>
</html>
17.2.2 本地存儲分類-sessionStorage
關閉瀏覽器數據就會消失
17.3 存儲復雜數據類型
主要有兩步:
1.把對象轉換成字符串
2.把字符串轉成對象
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>存儲復雜數據類型</title>
</head>
<body>
<script>const obj={uname: 'chenchen',age:18,gender:'女'}//存儲復雜數據類型,無法直接使用// localStorage.setItem('obj',obj)//取// console.log(localStorage.getItem('obj'))//1.復雜數據類型存儲必須轉換為JSON字符串類型存儲localStorage.setItem('obj',JSON.stringify(obj))//JSON對象,屬性和值有引號,而是引號統一是雙引號// {"uname":"chenchen","age":18,"gender":"女"}//取console.log(localStorage.getItem('obj'))//2.把JSON字符串轉換為對象console.log(JSON.parse(localStorage.getItem('obj')))
</script>
</body>
</html>
18.數組的map和join方法
18.1map方法
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>數組方法</title>
</head>
<body>
<script>const str=['pink','blue','green','yellow']//1.map方法const newStr=str.map(function (ele,index){//數組元素console.log(ele)//數組索引// console.log(index)return ele+"顏色"})console.log(newStr)//2.join方法
</script>
</body>
</html>
18.2 join方法
19.正則表達式
19.1 介紹
19.2 語法
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>正則表達式的使用</title>
</head>
<body>
<script>//要檢測的字符串const str="I like javascript"//1.定義正則表達式,檢測規則const reg=/java///2.檢測方法console.log(reg.test(str)); //true
</script>
</body>
</html>
<!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>正則表達式的使用</title>
</head>
<body>
<script>//要檢測的字符串const str = "I like javascript"//1.定義正則表達式,檢測規則const reg = /java///2.test(),檢測方法,是否匹配// console.log(reg.test(str)); //true//3.exec()console.log(reg.exec(str)); //返回字符串
</script>
</body>
</html>
19.3 元字符
正則測試工具
19.3.1 邊界符
<!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>正則表達式-元字符</title>
</head>
<body>
<script>//元字符//普通字符console.log(/java/.test("java")) //trueconsole.log(/java/.test("javajava")) //trueconsole.log(/java/.test("javaScript")) //trueconsole.log("===^===")//1.邊界符,^:開始,$:結束console.log(/^java/.test("java")) //trueconsole.log(/^java/.test("javajava")) //trueconsole.log(/^java/.test("javascript")) //trueconsole.log("===$===")console.log(/java$/.test("java")) //true,只有該種情況是true,否則全是falseconsole.log(/^java$/.test("javajava")) //falseconsole.log(/^java$/.test("javaScript")) //false
</script>
</body>
</html>
19.3.2 量詞
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>正則表達式-元字符-量詞</title>
</head>
<body>
<script>console.log(/^哈$/.test("哈")) //trueconsole.log(/^哈*$/.test("哈哈")) //true,重復零次或更多次console.log(/^哈+$/.test("哈哈")) //true,重復一次或更多次console.log(/^哈?$/.test("哈哈哈")) //false,重復零次或一次console.log(/^哈{2}$/.test("哈哈哈")) //false,重復2次console.log(/^哈{2,}$/.test(("哈哈哈"))) //true,重復2次或更多次console.log(/^哈{2,5}$/.test("哈哈哈哈哈哈")) //false,重復2~5次
</script>
</body>
</html>
19.3.3 字符類
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>正則表達式-元字符-字符類</title>
</head>
<body>
<script>console.log(/^[abc]$/.test("a")) //trueconsole.log(/^[abc]$/.test("b")) //trueconsole.log(/^[abc]$/.test("c")) //trueconsole.log(/^[abc]$/.test("ab")) //false,加了精確匹配,只有一個console.log(/^[abc]{2}$/.test("ab")) //trueconsole.log(/^[a-z]$/.test("a")) //true,加了精確,只有a-z其中的一個console.log(/^[a-z]$/.test("ab")) //false,加了精確,只有a-z其中的一個console.log(/^[A-Z]$/.test("A")) //true,加了精確,只有a-z其中的一個console.log(/^[a-zA-Z0-9]$/.test("A")) //true,加了精確,只有a-z其中的一個console.log(/^[1-9][0-9]{4,}$/.test("124899")) //true,表示一個字符串,第一位為1~9,第二位為0~9,第三位為>=4console.log(/^[1-9][0-9]{4,}$/.test("024899")) //false,表示一個字符串,第一位為1~9,第二位為0~9,>=4位console.log(/^[1-9][0-9]{4,}$/.test("123899")) //true,表示一個字符串,第一位為1~9,第二位為0~9,>=4位console.log(/^[1-9][0-9]{4,}$/.test("023899")) //false,表示一個字符串,第一位為1~9,第二位為0~9,>=4位console.log(/^[1-9][0-9]{4,}$/.test("123")) //false,表示一個字符串,第一位為1~9,第二位為0~9,>=4位
</script>
</body>
</html>
19.4 修飾符
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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>正則表達式-修飾符</title>
</head>
<body>
<script>//不區分大小寫console.log(/^java$/.test("java")) //trueconsole.log(/^java$/.test("JAVA")) //falseconsole.log(/^java$/gi.test("JAVA")) //true,后面的i表示,匹配的時候不區分大小寫//替換const str="javascript"console.log(str.replace(/a/i, "web"));console.log(str)
</script>
</body>
</html>
<!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>正則表達式-敏感詞</title>
</head>
<body>
<textarea name="" id="" cols="30" rows="10"></textarea>
<button>發布</button>
<div></div>
<script>const tx = document.querySelector("textarea")const btn = document.querySelector("button")const div = document.querySelector("div")btn.addEventListener("click", function () {// console.log(tx.value)const c=tx.value.replace(/激情|激動/g, "**")div.innerHTML = c})
</script>
</body>
</html>