當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JavaScript学习笔记(3)
生活随笔
收集整理的這篇文章主要介紹了
JavaScript学习笔记(3)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- Web APIs
- 什么是DOM?
- DOM樹
- 如何獲取網(wǎng)頁頁面元素?
- 根據(jù)id獲取元素 getElementById
- 根據(jù)標(biāo)簽名獲取元素 getElementsByTagName
- 根據(jù)類名獲取某些元素集合 getElementsByClassName 通用選擇器querySelector querySelectorAll(既能選擇id,也能選擇類和通用標(biāo)簽)(加#表示選擇id,加.表示選擇類)
- 獲取特殊元素body(document.body)html(document.documentElement)
- 事件概述(事件三要素:事件源 事件類型 事件處理程序)
- 執(zhí)行事件的步驟 常見鼠標(biāo)事件
- 操作元素
- 改變元素內(nèi)容 innerText和innerHtml
- innerText和innerHtml的區(qū)別(innerHtml顯示時(shí)支持html語法,讀取元素內(nèi)容時(shí)能保留html代碼)(所以以后一般只用innerHtml就好了)
- 通過注冊事件來改變元素屬性(劉德華與張學(xué)友圖片切換)
- 案例:根據(jù)系統(tǒng)不同時(shí)間段顯示不同問候語和圖片
- 表單元素的屬性操作(表單操作比較特殊,跟普通元素不同)type value checked selected disabled(this)
- 案例:仿京東顯示密碼
- 修改元素樣式屬性
- 行內(nèi)樣式與內(nèi)嵌樣式(行內(nèi)樣式比內(nèi)嵌樣式權(quán)重高,所以行內(nèi)樣式會(huì)覆蓋掉內(nèi)嵌樣式)
- 行內(nèi)樣式操作 element.style
- 浮動(dòng)二維碼點(diǎn)擊叉號?隱藏案例 style.display
- 案例:通過操作位置屬性來實(shí)現(xiàn)循環(huán)精靈圖(在字符串中引用變量的操作方法:lis[i].style.backgroundPosition = '0 -' + index + 'px';)
- 案例:文本框得到光標(biāo)和失去光標(biāo)的不同顯示(onfocus、onblur)(input、value)
- 通過類名樣式批量修改樣式操作來簡化代碼 element.className
- 如果要增加或者刪除類,可以用 this.className += ' change';嗎?
- 案例:仿新浪注冊密碼輸入框(onfocus/onblur結(jié)合類名樣式判斷密碼是否合規(guī))
- 操作元素總結(jié)
- 案例:頁面開關(guān)燈
- 案例:利用for循環(huán)實(shí)現(xiàn)多按鈕中點(diǎn)擊某個(gè)按鈕的變色(排他思想,先清除其他元素樣式,再設(shè)置自己的)
- 案例:實(shí)現(xiàn)頁面換膚(換背景)效果(利用循環(huán)注冊點(diǎn)擊事件)(querySelector鏈?zhǔn)将@取元素)
- 案例:新浪財(cái)經(jīng)鼠標(biāo)經(jīng)過某行實(shí)現(xiàn)變色效果(表格隔行變色效果)(onmouseover、onmouseout)
- 復(fù)選框的全選按鈕和取消全選
- 獲取元素自有屬性和自定義屬性(getAttribute)
- 通用修改元素屬性值方式setAttribute(以后就用這個(gè)修改,主要用來設(shè)置自定義屬性,元素自帶屬性還是用老方法設(shè)置)移除屬性值removeAttribute
Web APIs
https://developer.mozilla.org/zh-CN/docs/Web/API
什么是DOM?
DOM樹
如何獲取網(wǎng)頁頁面元素?
根據(jù)id獲取元素 getElementById
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head><body><div id="time">2019-9-9</div><script>// 1. 因?yàn)槲覀兾臋n頁面從上往下加載,所以先得有標(biāo)簽 所以我們script寫到標(biāo)簽的下面// 2. get 獲得 element 元素 by 通過 駝峰命名法 // 3. 參數(shù) id是大小寫敏感的字符串// 4. 返回的是一個(gè)元素對象var timer = document.getElementById('time');console.log(timer);console.log(typeof timer);// 5. console.dir 打印我們返回的元素對象 更好的查看里面的屬性和方法console.dir(timer);</script> </body></html>根據(jù)標(biāo)簽名獲取元素 getElementsByTagName
獲取父元素中的子元素,可以給父元素指定id,用getElementById獲取父元素,再用getElementsByTagName獲取父元素中的子元素
根據(jù)類名獲取某些元素集合 getElementsByClassName 通用選擇器querySelector querySelectorAll(既能選擇id,也能選擇類和通用標(biāo)簽)(加#表示選擇id,加.表示選擇類)
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head><body><div class="box">盒子1</div><div class="box">盒子2</div><div id="nav"><ul><li>首頁</li><li>產(chǎn)品</li></ul></div><script>// 1. getElementsByClassName 根據(jù)類名獲得某些元素集合var boxs = document.getElementsByClassName('box');console.log(boxs);// 2. querySelector 返回指定選擇器的第一個(gè)元素對象 切記 里面的選擇器需要加符號 .box #navvar firstBox = document.querySelector('.box');console.log(firstBox);var nav = document.querySelector('#nav');console.log(nav);var li = document.querySelector('li');console.log(li);// 3. querySelectorAll()返回指定選擇器的所有元素對象集合var allBox = document.querySelectorAll('.box');console.log(allBox);var lis = document.querySelectorAll('li');console.log(lis);</script> </body></html>獲取特殊元素body(document.body)html(document.documentElement)
事件概述(事件三要素:事件源 事件類型 事件處理程序)
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head><body><button id="btn">唐伯虎</button><script>// 點(diǎn)擊一個(gè)按鈕,彈出對話框// 1. 事件是有三部分組成 事件源 事件類型 事件處理程序 我們也稱為事件三要素//(1) 事件源 事件被觸發(fā)的對象 誰 按鈕var btn = document.getElementById('btn');//(2) 事件類型 如何觸發(fā) 什么事件 比如鼠標(biāo)點(diǎn)擊(onclick) 還是鼠標(biāo)經(jīng)過 還是鍵盤按下//(3) 事件處理程序 通過一個(gè)函數(shù)賦值的方式 完成btn.onclick = function() {alert('點(diǎn)秋香');}</script> </body></html>執(zhí)行事件的步驟 常見鼠標(biāo)事件
操作元素
改變元素內(nèi)容 innerText和innerHtml
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>div,p {width: 300px;height: 30px;line-height: 30px;color: #fff;background-color: pink;}</style> </head><body><button>顯示當(dāng)前系統(tǒng)時(shí)間</button><div>某個(gè)時(shí)間</div><p>1123</p><script>// 當(dāng)我們點(diǎn)擊了按鈕, div里面的文字會(huì)發(fā)生變化// 1. 獲取元素 var btn = document.querySelector('button');var div = document.querySelector('div');// 2.注冊事件btn.onclick = function() {// div.innerText = '2019-6-6';div.innerHTML = getDate();}function getDate() {var date = new Date();// 我們寫一個(gè) 2019年 5月 1日 星期三var year = date.getFullYear();var month = date.getMonth() + 1;var dates = date.getDate();var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];var day = date.getDay();return '今天是:' + year + '年' + month + '月' + dates + '日 ' + arr[day];}// 我們元素可以不用添加事件var p = document.querySelector('p');p.innerHTML = getDate();</script> </body></html>點(diǎn)擊按鈕顯示時(shí)間
innerText和innerHtml的區(qū)別(innerHtml顯示時(shí)支持html語法,讀取元素內(nèi)容時(shí)能保留html代碼)(所以以后一般只用innerHtml就好了)
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head><body><div></div><p>我是文字<span>123</span></p><script>// innerText 和 innerHTML的區(qū)別 // 1. innerText 不識(shí)別html標(biāo)簽 非標(biāo)準(zhǔn) 去除空格和換行var div = document.querySelector('div');// div.innerText = '<strong>今天是:</strong> 2019';// 2. innerHTML 識(shí)別html標(biāo)簽 W3C標(biāo)準(zhǔn) 保留空格和換行的div.innerHTML = '<strong>今天是:</strong> 2019';// 這兩個(gè)屬性是可讀寫的 可以獲取元素里面的內(nèi)容var p = document.querySelector('p');console.log(p.innerText);console.log(p.innerHTML);</script> </body></html>通過注冊事件來改變元素屬性(劉德華與張學(xué)友圖片切換)
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>img {width: 300px;}</style> </head><body><button id="ldh">劉德華</button><button id="zxy">張學(xué)友</button> <br><img src="images/ldh.jpg" alt="劉德華" title="劉德華"><script>// 修改元素屬性 src// 1. 獲取元素var ldh = document.getElementById('ldh');var zxy = document.getElementById('zxy');var img = document.querySelector('img');// 2. 注冊事件 處理程序zxy.onclick = function () {img.src = 'images/zxy.jpg';img.title = '張學(xué)友思密達(dá)';img.alt = '張學(xué)友因?yàn)樘珟泴?dǎo)致無法顯示'}ldh.onclick = function () {img.src = 'images/ldh.jpg';img.title = '劉德華';img.alt = '劉德華因?yàn)樘珟泴?dǎo)致無法顯示'}</script> </body></html>
案例:根據(jù)系統(tǒng)不同時(shí)間段顯示不同問候語和圖片
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>img {width: 300px;}</style> </head><body><img src="images/s.gif" alt=""><div>上午好</div><script>// 根據(jù)系統(tǒng)不同時(shí)間來判斷,所以需要用到日期內(nèi)置對象// 利用多分支語句來設(shè)置不同的圖片// 需要一個(gè)圖片,并且根據(jù)時(shí)間修改圖片,就需要用到操作元素src屬性// 需要一個(gè)div元素,顯示不同問候語,修改元素內(nèi)容即可// 1.獲取元素var img = document.querySelector('img');var div = document.querySelector('div');// 2. 得到當(dāng)前的小時(shí)數(shù)var date = new Date();var h = date.getHours();// 3. 判斷小時(shí)數(shù)改變圖片和文字信息if (h < 12) {img.src = 'images/s.gif';img.alt = '上午好圖片掛了!'div.innerHTML = '親,上午好,好好寫代碼';} else if (h < 18) {img.src = 'images/x.gif';img.alt = '下午好圖片掛了!'div.innerHTML = '親,下午好,好好寫代碼';} else {img.src = 'images/w.gif';img.alt = '晚上好圖片掛了!'div.innerHTML = '親,晚上好,好好寫代碼';}</script> </body></html>表單元素的屬性操作(表單操作比較特殊,跟普通元素不同)type value checked selected disabled(this)
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head><body><button>按鈕</button><input type="text" value="輸入內(nèi)容"><script>// 1. 獲取元素var btn = document.querySelector('button');var input = document.querySelector('input');// 2. 注冊事件 處理程序btn.onclick = function() {// input.innerHTML = '點(diǎn)擊了'; 這個(gè)是 普通盒子 比如 div 標(biāo)簽里面的內(nèi)容// 表單里面的值 文字內(nèi)容是通過 value 來修改的input.value = '被點(diǎn)擊了';// 如果想要某個(gè)表單被禁用 不能再點(diǎn)擊 disabled 我們想要這個(gè)按鈕 button禁用// btn.disabled = true;this.disabled = true;// this 指向的是事件函數(shù)的調(diào)用者 btn}</script> </body></html>
案例:仿京東顯示密碼
修改元素樣式屬性
行內(nèi)樣式與內(nèi)嵌樣式(行內(nèi)樣式比內(nèi)嵌樣式權(quán)重高,所以行內(nèi)樣式會(huì)覆蓋掉內(nèi)嵌樣式)
行內(nèi)樣式操作 element.style
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>div {width: 200px;height: 200px;background-color: pink;}</style> </head><body><div></div><script>// 1. 獲取元素var div = document.querySelector('div');// 2. 注冊事件 處理程序div.onclick = function() {// div.style里面的屬性 采取駝峰命名法 this.style.backgroundColor = 'purple';this.style.width = '250px';}</script> </body></html>
浮動(dòng)二維碼點(diǎn)擊叉號?隱藏案例 style.display
案例:通過操作位置屬性來實(shí)現(xiàn)循環(huán)精靈圖(在字符串中引用變量的操作方法:lis[i].style.backgroundPosition = ‘0 -’ + index + ‘px’;)
案例:文本框得到光標(biāo)和失去光標(biāo)的不同顯示(onfocus、onblur)(input、value)
通過類名樣式批量修改樣式操作來簡化代碼 element.className
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>div {width: 100px;height: 100px;background-color: pink;}.change {background-color: purple;color: #fff;font-size: 25px;margin-top: 100px;}</style> </head><body><div class="first">文本</div><script>// 1. 使用 element.style 獲得修改元素樣式 如果樣式比較少 或者 功能簡單的情況下使用var test = document.querySelector('div');test.onclick = function() {// this.style.backgroundColor = 'purple';// this.style.color = '#fff';// this.style.fontSize = '25px';// this.style.marginTop = '100px';// 讓我們當(dāng)前元素的類名改為了 change// 2. 我們可以通過 修改元素的className更改元素的樣式 適合于樣式較多或者功能復(fù)雜的情況// 3. 如果想要保留原先的類名,我們可以這么做 多類名選擇器// this.className = 'change';this.className = 'first change';}</script> </body></html>
如果要增加或者刪除類,可以用 this.className += ’ change’;嗎?
不行的,這樣會(huì)導(dǎo)致連續(xù)點(diǎn)擊后,change類越來越多
想刪掉類名,用 this.className -= ’ change’;也不行,因?yàn)樽址疀]有-=這種語法
案例:仿新浪注冊密碼輸入框(onfocus/onblur結(jié)合類名樣式判斷密碼是否合規(guī))
操作元素總結(jié)
案例:頁面開關(guān)燈
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head><body><button id="btn">開關(guān)燈</button><script>var btn = document.getElementById('btn');var flag = 0;btn.onclick = function () {if (flag == 0) {document.body.style.backgroundColor = 'black';flag = 1;} else {document.body.style.backgroundColor = '#fff';flag = 0;}}</script> </body></html>
案例:利用for循環(huán)實(shí)現(xiàn)多按鈕中點(diǎn)擊某個(gè)按鈕的變色(排他思想,先清除其他元素樣式,再設(shè)置自己的)
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head><body><button>按鈕1</button><button>按鈕2</button><button>按鈕3</button><button>按鈕4</button><button>按鈕5</button><script>// 1. 獲取所有按鈕元素var btns = document.getElementsByTagName('button');// btns得到的是偽數(shù)組 里面的每一個(gè)元素 btns[i]for (var i = 0; i < btns.length; i++) {btns[i].onclick = function() {// (1) 我們先把所有的按鈕背景顏色去掉 干掉所有人for (var i = 0; i < btns.length; i++) {btns[i].style.backgroundColor = '';}// (2) 然后才讓當(dāng)前的元素背景顏色為pink 留下我自己this.style.backgroundColor = 'pink';}}//2. 首先先排除其他人,然后才設(shè)置自己的樣式 這種排除其他人的思想我們成為排他思想</script> </body></html>案例:實(shí)現(xiàn)頁面換膚(換背景)效果(利用循環(huán)注冊點(diǎn)擊事件)(querySelector鏈?zhǔn)将@取元素)
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>* {margin: 0;padding: 0;}body {background: url(images/1.jpg) no-repeat center top;}li {list-style: none;}.baidu {overflow: hidden;margin: 100px auto;background-color: #fff;width: 410px;padding-top: 3px;}.baidu li {float: left;margin: 0 1px;cursor: pointer;}.baidu img {width: 100px;}</style> </head><body><ul class="baidu"><li><img src="images/1.jpg" alt="第一張圖片"></li><li><img src="images/2.jpg" alt="第二張圖片"></li><li><img src="images/3.jpg" alt="第三張圖片"></li><li><img src="images/4.jpg" alt="第四張圖片"></li></ul><script>// 1. 獲取元素 var imgs = document.querySelector('.baidu').querySelectorAll('img');// console.log(imgs);// 2. 循環(huán)注冊事件 for (var i = 0; i < imgs.length; i++) {imgs[i].onclick = function () {// this.src 就是我們點(diǎn)擊圖片的路徑 images/2.jpg// console.log(this.src);// 把這個(gè)路徑 this.src 給body 就可以了document.body.style.backgroundImage = 'url(' + this.src + ')';}}</script> </body></html>案例:新浪財(cái)經(jīng)鼠標(biāo)經(jīng)過某行實(shí)現(xiàn)變色效果(表格隔行變色效果)(onmouseover、onmouseout)
復(fù)選框的全選按鈕和取消全選
獲取元素自有屬性和自定義屬性(getAttribute)
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head><body><div id="demo" index="1" class="nav"></div><script>var div = document.querySelector('div');// 1. 獲取元素的屬性值// (1) element.屬性console.log(div.id);//(2) element.getAttribute('屬性') get得到獲取 attribute 屬性的意思 我們程序員自己添加的屬性我們稱為自定義屬性 indexconsole.log(div.getAttribute('id'));console.log(div.getAttribute('index'));// 2. 設(shè)置元素屬性值// (1) element.屬性= '值'div.id = 'test';div.className = 'navs';// (2) element.setAttribute('屬性', '值'); 主要針對于自定義屬性div.setAttribute('index', 2);div.setAttribute('class', 'footer'); // class 特殊 這里面寫的就是class 不是className// 3 移除屬性 removeAttribute(屬性) div.removeAttribute('index');</script> </body></html>通用修改元素屬性值方式setAttribute(以后就用這個(gè)修改,主要用來設(shè)置自定義屬性,元素自帶屬性還是用老方法設(shè)置)移除屬性值removeAttribute
代碼見上
總結(jié)
以上是生活随笔為你收集整理的JavaScript学习笔记(3)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript学习笔记(2)
- 下一篇: 网页同步交互和异步交互的区别?