中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

沈陽制作網(wǎng)站的人做網(wǎng)頁用什么軟件好

沈陽制作網(wǎng)站的人,做網(wǎng)頁用什么軟件好,做旅行攻略的網(wǎng)站好,快遞b2c是什么意思WebAPI編程(第一天,第二天) day01 - Web APIs 1.1. Web API介紹 1.1.1 API的概念1.1.2 Web API的概念1.1.3 API 和 Web API 總結(jié) 1.2. DOM 介紹 1.2.1 什么是DOM1.2.2. DOM樹 1.3. 獲取元素 1.3.1. 根據(jù)ID獲取1.3.2. 根據(jù)標(biāo)簽名獲取元素1.3.…
WebAPI編程(第一天,第二天)
  • day01 - Web APIs
    • 1.1. Web API介紹
      • 1.1.1 API的概念
      • 1.1.2 Web API的概念
      • 1.1.3 API 和 Web API 總結(jié)
    • 1.2. DOM 介紹
      • 1.2.1 什么是DOM
      • 1.2.2. DOM樹
    • 1.3. 獲取元素
      • 1.3.1. 根據(jù)ID獲取
      • 1.3.2. 根據(jù)標(biāo)簽名獲取元素
      • 1.3.3. H5新增獲取元素方式
      • 1.3.4 獲取特殊元素(body,html)
    • 1.4. 事件基礎(chǔ)
      • 1.4.1. 事件概述
      • 1.4.2. 事件三要素
      • 1.4.3. 執(zhí)行事件的步驟
      • 1.4.4. 常見的鼠標(biāo)事件
      • 1.4.5. 分析事件三要素
    • 1.5. 操作元素
      • 1.5.1. 改變元素內(nèi)容(獲取或設(shè)置)
      • 1.5.2. 常用元素的屬性操作
      • 1.5.3. 案例:分時問候
      • 1.5.4. 表單元素的屬性操作
      • 1.5.5. 案例:仿京東顯示密碼
      • 1.5.6. 樣式屬性操作
        • 方式1:通過操作style屬性
        • 案例:淘寶點(diǎn)擊關(guān)閉二維碼
        • 案例:循環(huán)精靈圖背景
        • 案例:顯示隱藏文本框內(nèi)容
        • 方式2:通過操作className屬性
    • 1.6. 今日總結(jié)
  • day02 - Web APIs
    • 1.1. 排他操作
      • 1.1.1 排他思想
    • 1.2 案例:百度換膚
    • 1.3 案例:表格隔行變色
    • 1.4 案例:全選
    • 1.5. 自定義屬性操作
      • 1.5.1 獲取屬性值
      • 1.5.2. 設(shè)置屬性值
      • 1.5.3. 移出屬性
      • 1.5.4. 案例:tab欄
      • 1.5.5. H5自定義屬性
    • 1.6. 節(jié)點(diǎn)操作
      • 1.6.1. 節(jié)點(diǎn)概述
      • 1.6.2. 節(jié)點(diǎn)層級
      • 1.6.3. 父級節(jié)點(diǎn)
      • 1.6.4. 子節(jié)點(diǎn)
      • 1.6.5. 案例:新浪下拉菜單
      • 1.6.6. 兄弟節(jié)點(diǎn)
      • 1.6.7. 創(chuàng)建節(jié)點(diǎn)
      • 1.6.8. 添加節(jié)點(diǎn)
      • 1.6.9. 案例:簡單版發(fā)布留言

day01 - Web APIs

學(xué)習(xí)目標(biāo):

能夠通過ID來獲取元素
能夠通過標(biāo)簽名來獲取元素
能夠通過class來獲取元素
能夠通過選擇器來獲取元素
能夠獲取body和html元素
能夠給元素注冊事件
能夠修改元素的內(nèi)容
能夠區(qū)分innerText和innerHTML的區(qū)別
能夠修改像div這類普通元素的屬性
能夠修改表單元素的屬性
能夠修改元素的樣式屬性

1.1. Web API介紹

1.1.1 API的概念

API(Application Programming Interface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開發(fā)人員基于某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,無需理解其內(nèi)部工作機(jī)制細(xì)節(jié),只需直接調(diào)用使用即可。

舉例解釋什么是API。

例如,

C語言中有一個函數(shù) fopen()可以打開硬盤上的文件,這個函數(shù)對于我們來說,就是一個C語言提供的打開文件的工具。

javascript中有一個函數(shù)alert()可以在頁面彈一個提示框,這個函數(shù)就是js提供的一個彈框工具。

這些工具(函數(shù))由編程語言提供,內(nèi)部的實(shí)現(xiàn)已經(jīng)封裝好了,我們只要學(xué)會靈活的使用這些工具即可。

1.1.2 Web API的概念

Web API 是瀏覽器提供的一套操作瀏覽器功能和頁面元素的 API ( BOM 和 DOM )。

現(xiàn)階段我們主要針對于瀏覽器講解常用的 API , 主要針對瀏覽器做交互效果。比如我們想要瀏覽器彈出一個警示框, 直接使用 alert(‘彈出’)

MDN 詳細(xì) API : https://developer.mozilla.org/zh-CN/docs/Web/API

因?yàn)?Web API 很多,所以我們將這個階段稱為 Web APIs。

此處的 Web API 特指瀏覽器提供的一系列API(很多函數(shù)或?qū)ο蠓椒?,即操作網(wǎng)頁的一系列工具。例如:操作html標(biāo)簽、操作頁面地址的方法。

1.1.3 API 和 Web API 總結(jié)
  1. API 是為我們程序員提供的一個接口,幫助我們實(shí)現(xiàn)某種功能,我們會使用就可以了,不必糾結(jié)內(nèi)部如何實(shí)現(xiàn)

  2. Web API 主要是針對于瀏覽器提供的接口,主要針對于瀏覽器做交互效果。

  3. Web API 一般都有輸入和輸出(函數(shù)的傳參和返回值),Web API 很多都是方法(函數(shù))

  4. 學(xué)習(xí) Web API 可以結(jié)合前面學(xué)習(xí)內(nèi)置對象方法的思路學(xué)習(xí)

1.2. DOM 介紹

1.2.1 什么是DOM

文檔對象模型(Document Object Model,簡稱DOM),是 W3C 組織推薦的處理可擴(kuò)展標(biāo)記語言(html或者xhtml)的標(biāo)準(zhǔn)編程接口。

W3C 已經(jīng)定義了一系列的 DOM 接口,通過這些 DOM 接口可以改變網(wǎng)頁的內(nèi)容、結(jié)構(gòu)和樣式。

DOM是W3C組織制定的一套處理 html和xml文檔的規(guī)范,所有的瀏覽器都遵循了這套標(biāo)準(zhǔn)。

1.2.2. DOM樹

在這里插入圖片描述

DOM樹 又稱為文檔樹模型,把文檔映射成樹形結(jié)構(gòu),通過節(jié)點(diǎn)對象對其處理,處理的結(jié)果可以加入到當(dāng)前的頁面。

  • 文檔:一個頁面就是一個文檔,DOM中使用document表示
  • 元素:網(wǎng)頁中的所有標(biāo)簽,通常稱為元素節(jié)點(diǎn),又簡稱為“元素”,使用element表示
  • 節(jié)點(diǎn):網(wǎng)頁中的所有內(nèi)容,在文檔樹中都是節(jié)點(diǎn)(標(biāo)簽、屬性、文本、注釋等),使用node表示
    在這里插入圖片描述

1.3. 獲取元素

為什么要獲取頁面元素?

例如:我們想要操作頁面上的某部分(顯示/隱藏,動畫),需要先獲取到該部分對應(yīng)的元素,再對其進(jìn)行操作。

1.3.1. 根據(jù)ID獲取
語法:document.getElementById(id)
作用:根據(jù)ID獲取元素對象
參數(shù):id值,區(qū)分大小寫的字符串
返回值:元素對象 或 null

案例代碼

<body><div id="time">2019-9-9</div><script>// 因?yàn)槲覀兾臋n頁面從上往下加載,所以先得有標(biāo)簽 所以我們script寫到標(biāo)簽的下面var timer = document.getElementById('time');console.log(timer);console.log(typeof timer);// console.dir 打印我們返回的元素對象 更好的查看里面的屬性和方法console.dir(timer);</script>
</body>
1.3.2. 根據(jù)標(biāo)簽名獲取元素
語法:document.getElementsByTagName('標(biāo)簽名') 或者 element.getElementsByTagName('標(biāo)簽名') 
作用:根據(jù)標(biāo)簽名獲取元素對象
參數(shù):標(biāo)簽名
返回值:元素對象集合(偽數(shù)組,數(shù)組元素是元素對象)

案例代碼

<body><ul><li>知否知否,應(yīng)是等你好久11</li><li>知否知否,應(yīng)是等你好久22</li><li>知否知否,應(yīng)是等你好久33</li><li>知否知否,應(yīng)是等你好久44</li><li>知否知否,應(yīng)是等你好久55</li></ul><ul id="nav"><li>生僻字</li><li>生僻字</li><li>生僻字</li><li>生僻字</li><li>生僻字</li></ul><script>// 1.返回的是 獲取過來元素對象的集合 以偽數(shù)組的形式存儲的var lis = document.getElementsByTagName('li');console.log(lis);console.log(lis[0]);// 2. 我們想要依次打印里面的元素對象我們可以采取遍歷的方式for (var i = 0; i < lis.length; i++) {console.log(lis[i]);}// 3. element.getElementsByTagName()  可以得到這個元素里面的某些標(biāo)簽var nav = document.getElementById('nav'); // 這個獲得nav 元素var navLis = nav.getElementsByTagName('li');console.log(navLis);</script>
</body><!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><ul><li>知否知否,應(yīng)是等你好久11</li><li>知否知否,應(yīng)是等你好久11</li><li>知否知否,應(yīng)是等你好久11</li><li>知否知否,應(yīng)是等你好久11</li></ul><ol id="ol"><li>生僻字</li><li>生僻字</li><li>生僻字</li><li>生僻字</li></ol><script>// 1.返回的是 獲取過來元素對象的集合 以偽數(shù)組的形式存儲的var lis = document.getElementsByTagName('li');console.log(lis);console.log(lis[0]);// 2. 我們想要依次打印里面的元素對象我們可以采取遍歷的方式for (var i = 0; i < lis.length; i++) {console.log(lis[i]);}// 3. 如果頁面中只有一個li 返回的還是偽數(shù)組的形式 // 4. 如果頁面中沒有這個元素 返回的是空的偽數(shù)組的形式// 5. element.getElementsByTagName('標(biāo)簽名'); 父元素必須是指定的單個元素var ol = document.getElementsByTagName('ol'); // [ol]console.log(ol[0].getElementsByTagName('li'));var ol1 = document.getElementById('ol');console.log(ol1.getElementsByTagName('li'));</script>
</body></html>

注意:getElementsByTagName()獲取到是動態(tài)集合,即:當(dāng)頁面增加了標(biāo)簽,這個集合中也就增加了元素。

1.3.3. H5新增獲取元素方式

在這里插入圖片描述

案例代碼

<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 返回指定選擇器的第一個元素對象  切記 里面的選擇器需要加符號 .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>
1.3.4 獲取特殊元素(body,html)
// 1.獲取body 元素var bodyEle = document.body;console.log(bodyEle);console.dir(bodyEle);// 2.獲取html 元素// var htmlEle = document.html;var htmlEle = document.documentElement;console.log(htmlEle);

1.4. 事件基礎(chǔ)

1.4.1. 事件概述

JavaScript 使我們有能力創(chuàng)建動態(tài)頁面,而事件是可以被 JavaScript 偵測到的行為。

簡單理解: 觸發(fā)— 響應(yīng)機(jī)制。

網(wǎng)頁中的每個元素都可以產(chǎn)生某些可以觸發(fā) JavaScript 的事件,例如,我們可以在用戶點(diǎn)擊某按鈕時產(chǎn)生一個 事件,然后去執(zhí)行某些操作。

1.4.2. 事件三要素
  • 事件源(誰):觸發(fā)事件的元素
  • 事件類型(什么事件): 例如 click 點(diǎn)擊事件
  • 事件處理程序(做啥):事件觸發(fā)后要執(zhí)行的代碼(函數(shù)形式),事件處理函數(shù)

案例代碼

<body><button id="btn">唐伯虎</button><script>// 點(diǎn)擊一個按鈕,彈出對話框// 1. 事件是有三部分組成  事件源  事件類型  事件處理程序   我們也稱為事件三要素//(1) 事件源 事件被觸發(fā)的對象   誰  按鈕var btn = document.getElementById('btn');//(2) 事件類型  如何觸發(fā) 什么事件 比如鼠標(biāo)點(diǎn)擊(onclick) 還是鼠標(biāo)經(jīng)過 還是鍵盤按下//(3) 事件處理程序  通過一個函數(shù)賦值的方式 完成btn.onclick = function() {alert('點(diǎn)秋香');}</script>
</body>
1.4.3. 執(zhí)行事件的步驟

在這里插入圖片描述

案例代碼

<body><div>123</div><script>// 執(zhí)行事件步驟// 點(diǎn)擊div 控制臺輸出 我被選中了// 1. 獲取事件源var div = document.querySelector('div');// 2.綁定事件 注冊事件// div.onclick // 3.添加事件處理程序 div.onclick = function() {console.log('我被選中了');}</script>
</body>
1.4.4. 常見的鼠標(biāo)事件

在這里插入圖片描述

1.4.5. 分析事件三要素
  • 下拉菜單三要素

  • 關(guān)閉廣告三要素

1.5. 操作元素

JavaScript的 DOM 操作可以改變網(wǎng)頁內(nèi)容、結(jié)構(gòu)和樣式,我們可以利用 DOM 操作元素來改變元素里面的內(nèi)容、屬性等。(注意:這些操作都是通過元素對象的屬性實(shí)現(xiàn)的)

1.5.1. 改變元素內(nèi)容(獲取或設(shè)置)

在這里插入圖片描述

innerText改變元素內(nèi)容

<body><button>顯示當(dāng)前系統(tǒng)時間</button><div>某個時間</div><p>1123</p><script>// 當(dāng)我們點(diǎn)擊了按鈕,  div里面的文字會發(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();// 我們寫一個 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];}</script>
</body>

innerText和innerHTML的區(qū)別

  • 獲取內(nèi)容時的區(qū)別:

innerText會去除空格和換行,而innerHTML會保留空格和換行
這兩個屬性是可讀寫的 可以獲取元素里面的內(nèi)容

  • 設(shè)置內(nèi)容時的區(qū)別:

innerText不會識別html,而innerHTML會識別

案例代碼

<body><div></div><p>我是文字<span>123</span></p><script>// innerText 和 innerHTML的區(qū)別 // 1. innerText 不識別html標(biāo)簽 非標(biāo)準(zhǔn)  去除空格和換行var div = document.querySelector('div');// div.innerText = '<strong>今天是:</strong> 2019';// 2. innerHTML 識別html標(biāo)簽 W3C標(biāo)準(zhǔn) 保留空格和換行的div.innerHTML = '<strong>今天是:</strong> 2019';// 這兩個屬性是可讀寫的  可以獲取元素里面的內(nèi)容var p = document.querySelector('p');console.log(p.innerText);console.log(p.innerHTML);</script>
</body>
1.5.2. 常用元素的屬性操作

在這里插入圖片描述

獲取屬性的值

元素對象.屬性名

設(shè)置屬性的值

元素對象.屬性名 = 值

案例代碼

<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á)';}ldh.onclick = function() {img.src = 'images/ldh.jpg';img.title = '劉德華';}</script>
</body>
1.5.3. 案例:分時問候
<!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)不同時間來判斷,所以需要用到日期內(nèi)置對象// 利用多分支語句來設(shè)置不同的圖片// 需要一個圖片,并且根據(jù)時間修改圖片,就需要用到操作元素src屬性// 需要一個div元素,顯示不同問候語,修改元素內(nèi)容即可// 1.獲取元素var img = document.querySelector('img');var div = document.querySelector('div');// 2. 得到當(dāng)前的小時數(shù)var date = new Date();var h = date.getHours();// 3. 判斷小時數(shù)改變圖片和文字信息if (h < 12) {img.src = 'images/s.gif';div.innerHTML = '親,上午好,好好寫代碼';} else if (h < 18) {img.src = 'images/x.gif';div.innerHTML = '親,下午好,好好寫代碼';} else {img.src = 'images/w.gif';div.innerHTML = '親,晚上好,好好寫代碼';}</script>
</body></html>
1.5.4. 表單元素的屬性操作

獲取屬性的值

元素對象.屬性名

設(shè)置屬性的值

元素對象.屬性名 = 值

表單元素中有一些屬性如:disabled、checked、selected,元素對象的這些屬性的值是布爾型。

案例代碼

<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() {// 表單里面的值 文字內(nèi)容是通過 value 來修改的input.value = '被點(diǎn)擊了';// 如果想要某個表單被禁用 不能再點(diǎn)擊 disabled  我們想要這個按鈕 button禁用// btn.disabled = true;this.disabled = true;// this 指向的是事件函數(shù)的調(diào)用者 btn}</script>
</body>
1.5.5. 案例:仿京東顯示密碼
<!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>.box {position: relative;width: 400px;border-bottom: 1px solid #ccc;margin: 100px auto;}.box input {width: 370px;height: 30px;border: 0;outline: none;}.box img {position: absolute;top: 2px;right: 2px;width: 24px;}</style>
</head><body><div class="box"><label for=""><img src="images/close.png" alt="" id="eye"></label><input type="password" name="" id="pwd"></div><script>// 1. 獲取元素var eye = document.getElementById('eye');var pwd = document.getElementById('pwd');// 2. 注冊事件 處理程序var flag = 0;eye.onclick = function() {// 點(diǎn)擊一次之后, flag 一定要變化if (flag == 0) {pwd.type = 'text';eye.src = 'images/open.png';flag = 1; // 賦值操作} else {pwd.type = 'password';eye.src = 'images/close.png';flag = 0;}}</script>
</body></html>
1.5.6. 樣式屬性操作

我們可以通過 JS 修改元素的大小、顏色、位置等樣式。

常用方式

在這里插入圖片描述

方式1:通過操作style屬性

元素對象的style屬性也是一個對象!

元素對象.style.樣式屬性 = 值;

案例代碼

<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>
案例:淘寶點(diǎn)擊關(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><style>.box {position: relative;width: 74px;height: 88px;border: 1px solid #ccc;margin: 100px auto;font-size: 12px;text-align: center;color: #f40;/* display: block; */}.box img {width: 60px;margin-top: 5px;}.close-btn {position: absolute;top: -1px;left: -16px;width: 14px;height: 14px;border: 1px solid #ccc;line-height: 14px;font-family: Arial, Helvetica, sans-serif;cursor: pointer;}</style>
</head><body><div class="box">淘寶二維碼<img src="images/tao.png" alt=""><i class="close-btn">×</i></div><script>// 1. 獲取元素 var btn = document.querySelector('.close-btn');var box = document.querySelector('.box');// 2.注冊事件 程序處理btn.onclick = function() {box.style.display = 'none';}</script>
</body></html>
案例:循環(huá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;}li {list-style-type: none;}.box {width: 250px;margin: 100px auto;}.box li {float: left;width: 24px;height: 24px;background-color: pink;margin: 15px;background: url(images/sprite.png) no-repeat;}</style>
</head><body><div class="box"><ul><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul></div><script>// 1. 獲取元素 所有的小li var lis = document.querySelectorAll('li');for (var i = 0; i < lis.length; i++) {// 讓索引號 乘以 44 就是每個li 的背景y坐標(biāo)  index就是我們的y坐標(biāo)var index = i * 44;lis[i].style.backgroundPosition = '0 -' + index + 'px';}</script>
</body></html>
案例:顯示隱藏文本框內(nèi)容

在這里插入圖片描述

<!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>input {color: #999;}</style>
</head><body><input type="text" value="手機(jī)"><script>// 1.獲取元素var text = document.querySelector('input');// 2.注冊事件 獲得焦點(diǎn)事件 onfocus text.onfocus = function() {// console.log('得到了焦點(diǎn)');if (this.value === '手機(jī)') {this.value = '';}// 獲得焦點(diǎn)需要把文本框里面的文字顏色變黑this.style.color = '#333';}// 3. 注冊事件 失去焦點(diǎn)事件 onblurtext.onblur = function() {// console.log('失去了焦點(diǎn)');if (this.value === '') {this.value = '手機(jī)';}// 失去焦點(diǎn)需要把文本框里面的文字顏色變淺色this.style.color = '#999';}</script></body></html>
方式2:通過操作className屬性

元素對象.className = 值;

因?yàn)閏lass是關(guān)鍵字,所有使用className。

案例代碼

<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';// 2. 我們可以通過 修改元素的className更改元素的樣式 適合于樣式較多或者功能復(fù)雜的情況// 3. 如果想要保留原先的類名,我們可以這么做 多類名選擇器// this.className = 'change';this.className = 'first change';//注意空格// this.className += ' change';// this.className = this.className+' change';}</script>
</body>

在這里插入圖片描述

1.6. 今日總結(jié)

在這里插入圖片描述

day02 - Web APIs

學(xué)習(xí)目標(biāo):

能夠說出排他操作的一般實(shí)現(xiàn)步驟

能夠使用html5中的dataset方式操作自定義屬性

能夠根據(jù)提示完成百度換膚的案例

能夠根據(jù)提示完成全選案例

能夠根據(jù)提示完成tab欄切換案例

能夠區(qū)分元素節(jié)點(diǎn)、文本節(jié)點(diǎn)、屬性節(jié)點(diǎn)

能夠獲取指定元素的父元素

能夠獲取指定元素的所有子元素

能夠說出childNodes和children的區(qū)別

能夠使用createElement創(chuàng)建頁面元素

1.1. 排他操作

1.1.1 排他思想

如果有同一組元素,我們想要某一個元素實(shí)現(xiàn)某種樣式, 需要用到循環(huán)的排他思想算法:

  1. 所有元素全部清除樣式(干掉其他人)

  2. 給當(dāng)前元素設(shè)置樣式 (留下我自己)

  3. 注意順序不能顛倒,首先干掉其他人,再設(shè)置自己

    <button>按鈕1</button>
    <button>按鈕2</button>
    <button>按鈕3</button>
    <button>按鈕4</button>
    <button>按鈕5</button>
    <script>// 1. 獲取所有按鈕元素var btns = document.getElementsByTagName('button');// btns得到的是偽數(shù)組  里面的每一個元素 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';}}
    </script>
    

1.2 案例:百度換膚

<body><ul class="baidu"><li><img src="images/1.jpg"></li><li><img src="images/2.jpg"></li><li><img src="images/3.jpg"></li><li><img src="images/4.jpg"></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);// 把這個路徑 this.src 給body 就可以了document.body.style.backgroundImage = 'url(' + this.src + ')';}}</script>
</body>

1.3 案例:表格隔行變色

    <script>// 1.獲取元素 獲取的是 tbody 里面所有的行var trs = document.querySelector('tbody').querySelectorAll('tr');// 2. 利用循環(huán)綁定注冊事件for (var i = 0; i < trs.length; i++) {// 3. 鼠標(biāo)經(jīng)過事件 onmouseovertrs[i].onmouseover = function() {// console.log(11);this.className = 'bg';}// 4. 鼠標(biāo)離開事件 onmouseouttrs[i].onmouseout = function() {this.className = '';}}</script>

1.4 案例:全選

    <script>// 1. 全選和取消全選做法:  讓下面所有復(fù)選框的checked屬性(選中狀態(tài)) 跟隨 全選按鈕即可// 獲取元素var j_cbAll = document.getElementById('j_cbAll'); var j_tbs = document.getElementById('j_tb').getElementsByTagName('input'); // 全選按鈕注冊事件j_cbAll.onclick = function() {// this.checked 當(dāng)前復(fù)選框的選中狀態(tài)console.log(this.checked);for (var i = 0; i < j_tbs.length; i++) {j_tbs[i].checked = this.checked;}}// 給所有的子復(fù)選框注冊單擊事件for (var i = 0; i < j_tbs.length; i++) {j_tbs[i].onclick = function() {// flag 控制全選按鈕是否選中var flag = true;// 每次點(diǎn)擊下面的復(fù)選框都要循環(huán)檢查者4個小按鈕是否全被選中for (var i = 0; i < j_tbs.length; i++) {if (!j_tbs[i].checked) {flag = false;break; }}// 設(shè)置全選按鈕的狀態(tài)j_cbAll.checked = flag;}}</script>

1.5. 自定義屬性操作

1.5.1 獲取屬性值
    <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'));</script>
1.5.2. 設(shè)置屬性值

在這里插入圖片描述

        // 2. 設(shè)置元素屬性值// (1) element.屬性= '值'div.id = 'test';div.className = 'navs';// (2) element.setAttribute('屬性', '值');  主要針對于自定義屬性div.setAttribute('index', 2);div.setAttribute('class', 'footer'); // class 特殊  這里面寫的就是<!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>
1.5.3. 移出屬性
		// class 不是className// 3 移除屬性 removeAttribute(屬性)    div.removeAttribute('index');
1.5.4. 案例:tab欄

在這里插入圖片描述

<!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;}li {list-style-type: none;}.tab {width: 978px;margin: 100px auto;}.tab_list {height: 39px;border: 1px solid #ccc;background-color: #f1f1f1;}.tab_list li {float: left;height: 39px;line-height: 39px;padding: 0 20px;text-align: center;cursor: pointer;}.tab_list .current {background-color: #c81623;color: #fff;}.item_info {padding: 20px 0 0 20px;}.item {display: none;}</style>
</head><body><div class="tab"><div class="tab_list"><ul><li class="current">商品介紹</li><li>規(guī)格與包裝</li><li>售后保障</li><li>商品評價(50000)</li><li>手機(jī)社區(qū)</li></ul></div><div class="tab_con"><div class="item" style="display: block;">商品介紹模塊內(nèi)容</div><div class="item">規(guī)格與包裝模塊內(nèi)容</div><div class="item">售后保障模塊內(nèi)容</div><div class="item">商品評價(50000)模塊內(nèi)容</div><div class="item">手機(jī)社區(qū)模塊內(nèi)容</div></div></div><script>// 獲取元素var tab_list = document.querySelector('.tab_list');var lis = tab_list.querySelectorAll('li');var items = document.querySelectorAll('.item');// for循環(huán)綁定點(diǎn)擊事件for (var i = 0; i < lis.length; i++) {// 開始給5個小li 設(shè)置索引號 lis[i].setAttribute('index', i);lis[i].onclick = function() {// 1. 上的模塊選項(xiàng)卡,點(diǎn)擊某一個,當(dāng)前這一個底色會是紅色,其余不變(排他思想) 修改類名的方式// 干掉所有人 其余的li清除 class 這個類for (var i = 0; i < lis.length; i++) {lis[i].className = '';}// 留下我自己 this.className = 'current';// 2. 下面的顯示內(nèi)容模塊var index = this.getAttribute('index');console.log(index);// 干掉所有人 讓其余的item 這些div 隱藏for (var i = 0; i < items.length; i++) {items[i].style.display = 'none';}// 留下我自己 讓對應(yīng)的item 顯示出來items[index].style.display = 'block';}}</script>
</body></html>
1.5.5. H5自定義屬性

自定義屬性目的:是為了保存并使用數(shù)據(jù)。有些數(shù)據(jù)可以保存到頁面中而不用保存到數(shù)據(jù)庫中。

自定義屬性獲取是通過getAttribute(‘屬性’) 獲取。

但是有些自定義屬性很容易引起歧義,不容易判斷是元素的內(nèi)置屬性還是自定義屬性。

H5給我們新增了自定義屬性:

在這里插入圖片描述
在這里插入圖片描述

    <div getTime="20" data-index="2" data-list-name="andy"></div><script>var div = document.querySelector('div');// console.log(div.getTime);console.log(div.getAttribute('getTime'));div.setAttribute('data-time', 20);console.log(div.getAttribute('data-index'));console.log(div.getAttribute('data-list-name'));// h5新增的獲取自定義屬性的方法 它只能獲取data-開頭的// dataset 是一個集合里面存放了所有以data開頭的自定義屬性console.log(div.dataset);console.log(div.dataset.index);console.log(div.dataset['index']);// 如果自定義屬性里面有多個-鏈接的單詞,我們獲取的時候采取 駝峰命名法//data-list-name="andy"console.log(div.dataset.listName);console.log(div.dataset['listName']);</script>

1.6. 節(jié)點(diǎn)操作

在這里插入圖片描述

1.6.1. 節(jié)點(diǎn)概述

網(wǎng)頁中的所有內(nèi)容都是節(jié)點(diǎn)(標(biāo)簽、屬性、文本、注釋等),在DOM 中,節(jié)點(diǎn)使用 node 來表示。

HTML DOM 樹中的所有節(jié)點(diǎn)均可通過 JavaScript 進(jìn)行訪問,所有 HTML 元素(節(jié)點(diǎn))均可被修改,也可以創(chuàng)建或刪除。

在這里插入圖片描述

一般地,節(jié)點(diǎn)至少擁有nodeType(節(jié)點(diǎn)類型)、nodeName(節(jié)點(diǎn)名稱)和nodeValue(節(jié)點(diǎn)值)這三個基本屬性。

1.6.2. 節(jié)點(diǎn)層級

利用 DOM 樹可以把節(jié)點(diǎn)劃分為不同的層級關(guān)系,常見的是父子兄層級關(guān)系。

1.6.3. 父級節(jié)點(diǎn)

在這里插入圖片描述

    <div class="demo"><div class="box"><span class="erweima">×</span></div></div><script>// 1. 父節(jié)點(diǎn) parentNodevar erweima = document.querySelector('.erweima');// var box = document.querySelector('.box');// 得到的是離元素最近的父級節(jié)點(diǎn)(親爸爸) 如果找不到父節(jié)點(diǎn)就返回為 nullconsole.log(erweima.parentNode);</script>
1.6.4. 子節(jié)點(diǎn)

所有子節(jié)點(diǎn)

在這里插入圖片描述

在這里插入圖片描述

子元素節(jié)點(diǎn)

    <ul><li>我是li</li><li>我是li</li><li>我是li</li><li>我是li</li></ul><script>// DOM 提供的方法(API)獲取var ul = document.querySelector('ul');var lis = ul.querySelectorAll('li');// 1. 子節(jié)點(diǎn)  childNodes 所有的子節(jié)點(diǎn) 包含 元素節(jié)點(diǎn) 文本節(jié)點(diǎn)等等console.log(ul.childNodes);console.log(ul.childNodes[0].nodeType);console.log(ul.childNodes[1].nodeType);// 2. children 獲取所有的子元素節(jié)點(diǎn) 也是我們實(shí)際開發(fā)常用的console.log(ul.children);</script>

第一個子元素和最后一個子元素

實(shí)際開發(fā)中,firstChild 和 lastChild 包含其他節(jié)點(diǎn),操作不方便,而 firstElementChild 和 lastElementChild 又有兼容性問題,那么我們?nèi)绾潍@取第一個子元素節(jié)點(diǎn)或最后一個子元素節(jié)點(diǎ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><ol><li>我是li1</li><li>我是li2</li><li>我是li3</li><li>我是li4</li><li>我是li5</li></ol><script>var ol = document.querySelector('ol');// 1. firstChild 第一個子節(jié)點(diǎn) 不管是文本節(jié)點(diǎn)還是元素節(jié)點(diǎn)console.log(ol.firstChild);console.log(ol.lastChild);// 2. firstElementChild 返回第一個子元素節(jié)點(diǎn) ie9才支持console.log(ol.firstElementChild);console.log(ol.lastElementChild);// 3. 實(shí)際開發(fā)的寫法  既沒有兼容性問題又返回第一個子元素console.log(ol.children[0]);console.log(ol.children[ol.children.length - 1]);</script>
</body></html>
1.6.5. 案例:新浪下拉菜單
    <script>// 1. 獲取元素var nav = document.querySelector('.nav');var lis = nav.children; // 得到4個小li// 2.循環(huán)注冊事件for (var i = 0; i < lis.length; i++) {lis[i].onmouseover = function() {this.children[1].style.display = 'block';}lis[i].onmouseout = function() {this.children[1].style.display = 'none';}}</script>
1.6.6. 兄弟節(jié)點(diǎn)

在這里插入圖片描述

    <div>我是div</div><span>我是span</span><script>var div = document.querySelector('div');// 1.nextSibling 下一個兄弟節(jié)點(diǎn) 包含元素節(jié)點(diǎn)或者 文本節(jié)點(diǎn)等等console.log(div.nextSibling);console.log(div.previousSibling);// 2. nextElementSibling 得到下一個兄弟元素節(jié)點(diǎn)console.log(div.nextElementSibling);console.log(div.previousElementSibling);</script>

下一個兄弟元素節(jié)點(diǎn)(有兼容性問題)

   function getNextElementSibling(element) {var el = element;while (el = el.nextSibling) {if (el.nodeType === 1) {return el;}}return null;}  
1.6.7. 創(chuàng)建節(jié)點(diǎn)

在這里插入圖片描述

1.6.8. 添加節(jié)點(diǎn)

在這里插入圖片描述

    <ul><li>123</li></ul><script>// 1. 創(chuàng)建節(jié)點(diǎn)元素節(jié)點(diǎn)var li = document.createElement('li');// 2. 添加節(jié)點(diǎn) node.appendChild(child)  node 父級  child 是子級 后面追加元素var ul = document.querySelector('ul');ul.appendChild(li);// 3. 添加節(jié)點(diǎn) node.insertBefore(child, 指定元素);var lili = document.createElement('li');ul.insertBefore(lili, ul.children[0]);// 4. 我們想要頁面添加一個新的元素 : 1. 創(chuàng)建元素 2. 添加元素</script>
1.6.9. 案例:簡單版發(fā)布留言
<body><textarea name="" id=""></textarea><button>發(fā)布</button><ul></ul><script>// 1. 獲取元素var btn = document.querySelector('button');var text = document.querySelector('textarea');var ul = document.querySelector('ul');// 2. 注冊事件btn.onclick = function() {if (text.value == '') {alert('您沒有輸入內(nèi)容');return false;} else {// console.log(text.value);// (1) 創(chuàng)建元素var li = document.createElement('li');// 先有l(wèi)i 才能賦值li.innerHTML = text.value;// (2) 添加元素// ul.appendChild(li);ul.insertBefore(li, ul.children[0]);}}</script>
</body>
http://www.risenshineclean.com/news/54662.html

相關(guān)文章:

  • 淘寶客網(wǎng)站建設(shè)教程西安seo公司
  • 自學(xué)python的網(wǎng)站電商代運(yùn)營公司十強(qiáng)
  • 平面設(shè)計(jì)有什么網(wǎng)站女教師網(wǎng)課入06654侵錄屏
  • 電商網(wǎng)站運(yùn)營方案百度優(yōu)化點(diǎn)擊軟件
  • 交友視頻網(wǎng)站建設(shè)網(wǎng)絡(luò)推廣靠譜嗎
  • 廣州英銘網(wǎng)站建設(shè)百度網(wǎng)盤官網(wǎng)下載
  • 企業(yè)網(wǎng)站建設(shè)公司司如何做好網(wǎng)絡(luò)銷售技巧
  • 企業(yè)網(wǎng)站建設(shè)優(yōu)化泉州百度競價推廣
  • jsp怎么做網(wǎng)站的刪除數(shù)字營銷服務(wù)商seo
  • 5年網(wǎng)站續(xù)費(fèi)多少錢做銷售找客戶渠道
  • 濟(jì)源建設(shè)工程管理處網(wǎng)站網(wǎng)絡(luò)推廣員要怎么做
  • 網(wǎng)站主頁不收錄志鴻優(yōu)化設(shè)計(jì)電子版
  • 網(wǎng)站建設(shè)座談會上的發(fā)言寧波pc營銷型網(wǎng)站制作
  • 電子商務(wù)網(wǎng)站建設(shè)策劃書的流程疫情最新政策最新消息
  • 搭建一個網(wǎng)站花多少錢大數(shù)據(jù)營銷精準(zhǔn)營銷
  • 江蘇煙草電商網(wǎng)站怎么做如何網(wǎng)絡(luò)推廣新產(chǎn)品
  • 有關(guān)做美食的網(wǎng)站王通seo教程
  • 網(wǎng)站怎么發(fā)布做微商在線識別圖片找原圖
  • 溫州建設(shè)網(wǎng)站哪家好百度官方認(rèn)證
  • 百度做網(wǎng)站推廣怎么樣優(yōu)化網(wǎng)站seo
  • 游戲網(wǎng)站建設(shè)一條龍平臺推廣公眾平臺營銷
  • 網(wǎng)站建設(shè)空標(biāo)記網(wǎng)站seo查詢站長之家
  • 住房城鄉(xiāng)與建設(shè)廳網(wǎng)站企業(yè)網(wǎng)站推廣策略
  • 做網(wǎng)站廣告有哪些職位seo關(guān)鍵詞挖掘
  • 國內(nèi)企業(yè)網(wǎng)站設(shè)計(jì)網(wǎng)站排名優(yōu)化培訓(xùn)哪家好
  • 做音樂網(wǎng)站用什么程序網(wǎng)站策劃書
  • 怎么做博客網(wǎng)站windows7優(yōu)化大師
  • 移動端前端開發(fā)需要學(xué)什么成都網(wǎng)站排名 生客seo
  • 受歡迎的鄭州網(wǎng)站建設(shè)個人可以做推廣的平臺有哪些
  • 沈陽電商網(wǎng)站建設(shè)上海關(guān)鍵詞seo