系統帶你學習 WebAPIs 第二講

Web APIs

本篇學習目標:

能夠說出排他操作的一般實現步驟

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

能夠根據提示完成百度換膚的案例

能夠根據提示完成全選案例

能夠根據提示完成tab欄切換案例

能夠區分元素節點、文本節點、屬性節點

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

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

能夠說出childNodes和children的區別

能夠使用createElement創建頁面元素

1.1. 排他操作

1.1.1 排他思想

在這里插入圖片描述

如果有同一組元素,我們想要某一個元素實現某種樣式, 需要用到循環的排他思想算法:

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

  2. 給當前元素設置樣式 (留下我自己)

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

    <button>按鈕1</button><button>按鈕2</button><button>按鈕3</button><button>按鈕4</button><button>按鈕5</button><script>// 1. 獲取所有按鈕元素var btns = document.getElementsByTagName('button');// btns得到的是偽數組  里面的每一個元素 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) 然后才讓當前的元素背景顏色為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. 循環注冊事件 for (var i = 0; i < imgs.length; i++) {imgs[i].onclick = function() {// this.src 就是我們點擊圖片的路徑   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. 利用循環綁定注冊事件for (var i = 0; i < trs.length; i++) {// 3. 鼠標經過事件 onmouseovertrs[i].onmouseover = function() {// console.log(11);this.className = 'bg';}// 4. 鼠標離開事件 onmouseouttrs[i].onmouseout = function() {this.className = '';}}</script>

1.4 案例:全選

在這里插入圖片描述

在這里插入圖片描述

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. 設置屬性值

在這里插入圖片描述

        // 2. 設置元素屬性值// (1) element.屬性= '值'div.id = 'test';div.className = 'navs';// (2) element.setAttribute('屬性', '值');  主要針對于自定義屬性div.setAttribute('index', 2);div.setAttribute('class', 'footer'); // class 特殊  這里面寫的就是

1.5.3. 移出屬性

在這里插入圖片描述

		// class 不是className// 3 移除屬性 removeAttribute(屬性)    div.removeAttribute('index');

1.5.4. 案例:tab欄

在這里插入圖片描述

在這里插入圖片描述

1.5.5. H5自定義屬性

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

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

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

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']);// 如果自定義屬性里面有多個-鏈接的單詞,我們獲取的時候采取 駝峰命名法console.log(div.dataset.listName);console.log(div.dataset['listName']);</script>

1.6. 節點操作

1.6.1. 節點概述

? 網頁中的所有內容都是節點(標簽、屬性、文本、注釋等),在DOM 中,節點使用 node 來表示。

? HTML DOM 樹中的所有節點均可通過 JavaScript 進行訪問,所有 HTML 元素(節點)均可被修改,也可以創建或刪除。

在這里插入圖片描述

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

在這里插入圖片描述

1.6.2. 節點層級

? 利用 DOM 樹可以把節點劃分為不同的層級關系,常見的是父子兄層級關系

在這里插入圖片描述

1.6.3. 父級節點

在這里插入圖片描述

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

1.6.4. 子節點

所有子節點

在這里插入圖片描述

子元素節點

在這里插入圖片描述

    <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. 子節點  childNodes 所有的子節點 包含 元素節點 文本節點等等console.log(ul.childNodes);console.log(ul.childNodes[0].nodeType);console.log(ul.childNodes[1].nodeType);// 2. children 獲取所有的子元素節點 也是我們實際開發常用的console.log(ul.children);</script>

第1個子節點

在這里插入圖片描述

最后1個子節點

在這里插入圖片描述

第1個子元素節點

在這里插入圖片描述

最后1個子元素節點

在這里插入圖片描述

? 實際開發中,firstChild 和 lastChild 包含其他節點,操作不方便,而 firstElementChild 和 lastElementChild 又有兼容性問題,那么我們如何獲取第一個子元素節點或最后一個子元素節點呢?

在這里插入圖片描述

    <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 第一個子節點 不管是文本節點還是元素節點console.log(ol.firstChild);console.log(ol.lastChild);// 2. firstElementChild 返回第一個子元素節點 ie9才支持console.log(ol.firstElementChild);console.log(ol.lastElementChild);// 3. 實際開發的寫法  既沒有兼容性問題又返回第一個子元素console.log(ol.children[0]);console.log(ol.children[ol.children.length - 1]);</script>

1.6.5. 案例:新浪下拉菜單

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

    <script>// 1. 獲取元素var nav = document.querySelector('.nav');var lis = nav.children; // 得到4個小li// 2.循環注冊事件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. 兄弟節點

下一個兄弟節點

在這里插入圖片描述

上一個兄弟節點
在這里插入圖片描述

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

下一個兄弟元素節點(有兼容性問題)

在這里插入圖片描述

上一個兄弟元素節點(有兼容性問題)
在這里插入圖片描述

在這里插入圖片描述

   function getNextElementSibling(element) {var el = element;while (el = el.nextSibling) {if (el.nodeType === 1) {return el;}}return null;}  

總結:獲取節點的API

getElementById

getElementsByTagName

getElementsByClassName

queryselector

queryselectorall

document.body

parentNode

childNodes

children

previousSibling、previousElementSliblint

nextSibling、nextElementSibling

1.6.7. 創建節點

在這里插入圖片描述

1.6.8. 添加節點

在這里插入圖片描述

    <ul><li>123</li></ul><script>// 1. 創建節點元素節點var li = document.createElement('li');// 2. 添加節點 node.appendChild(child)  node 父級  child 是子級 后面追加元素var ul = document.querySelector('ul');ul.appendChild(li);// 3. 添加節點 node.insertBefore(child, 指定元素);var lili = document.createElement('li');ul.insertBefore(lili, ul.children[0]);// 4. 我們想要頁面添加一個新的元素 : 1. 創建元素 2. 添加元素</script>

1.6.9. 案例:簡單版發布留言

在這里插入圖片描述

在這里插入圖片描述

<body><textarea name="" id=""></textarea><button>發布</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('您沒有輸入內容');return false;} else {// console.log(text.value);// (1) 創建元素var li = document.createElement('li');// 先有li 才能賦值li.innerHTML = text.value;// (2) 添加元素// ul.appendChild(li);ul.insertBefore(li, ul.children[0]);}}</script>
</body>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248607.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248607.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248607.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在微信瀏覽器中 location.reload() 不刷新解決方案(直接調用方法)

1、問題 在微信瀏覽器中&#xff0c;需要時刷新當前頁面。 正常情況下我們直接使用 location.reload 方法來刷新。 2、解決方法 function realod(){var {search,href} window.location;href href.replace(/&?t_reload(\d)/g,)window.location.href href(search?&:…

Python爬蟲學習筆記1:request、selenium、ChromeDrive、GeckoDriver等相關依賴安裝

系列學習筆記參考&#xff1a;python3網絡爬蟲開發實戰 requests # pip install requests import requestsselenium Selenium是一個自動化測試工具&#xff0c;利用它我們可以驅動瀏覽器執行特定的動作&#xff0c;如點擊、下拉等 操作 。 對于一些 JavaScript誼染的頁面來說&a…

系統帶你學習 WebAPIs 第三講

Web APIs 本篇學習目標&#xff1a; 能夠使用removeChild()方法刪除節點 能夠完成動態生成表格案例 能夠使用傳統方式和監聽方式給元素注冊事件 能夠說出事件流執行的三個階段 能夠在事件處理函數中獲取事件對象 能夠使用事件對象取消默認行為 能夠使用事件對象阻止事件冒泡 能…

CSS3文本與字體

一、CSS3 換行 1、word-break&#xff08;規定自動換行的處理方法&#xff09; word-break: normal / break-all / keep-all;/* normal&#xff1a;使用瀏覽器默認的換行規則 break-all&#xff1a;允許在單詞內換行 keep-all&#xff1a;只能在半角空格或連字符處換行 */ 兼容…

系統帶你學習 WebAPIs 第四講

Web APIs 本篇學習目標&#xff1a; 能夠說出常用的3-5個鍵盤事件 能夠知道如何獲取當前鍵盤按下的是哪個鍵 能夠知道瀏覽器的頂級對象window 能夠使用window.onload事件 能夠使用window.onresize事件 能夠說出兩種定時器的區別 能夠使用location對象的href屬性完成頁面之間的跳…

linux chrome 安裝過程記錄

最近&#xff0c;由于公司需要做爬蟲抓取一些新聞&#xff0c;在開發過程中&#xff0c;發現有些網站有一定的反爬措施&#xff0c;通過瀏覽器訪問一切正常&#xff0c;通過其他方式&#xff0c;包括&#xff1a;curl&#xff0c;urlconnection 等&#xff0c;就算加入了cookie…

系統帶你學習 WebAPIs 第五講

Web APIs 本篇學習目標: 能夠說出常見 offset 系列屬性的作用 能夠說出常見 client 系列屬性的作用 能夠說出常見 scroll 系列屬性的作用 能夠封裝簡單動畫函數 **1.1. **元素偏移量 offset 系列 1.1.1 offset 概述 offset 翻譯過來就是偏移量&#xff0c; 我們使用 offset系…

ajax請求相關問題

Ajax中async:false/true的作用&#xff1a; async. 默認是 true&#xff0c;即為異步方式&#xff0c;$.ajax執行后&#xff0c;會繼續執行ajax后面的腳本&#xff0c;直到服務器端返回數據后&#xff0c;觸發$.ajax里的success方法&#xff0c;這時候執行的是兩個線程。 async…

有贊美業微前端的落地總結

2020年4月&#xff0c;有贊美業的前端團隊歷經7個月時間&#xff0c;完成了美業PC架構從單體SPA到微前端架構的設計、遷移工作。PPT在去年6月份就有了&#xff0c;現在再整理一下形成文章分享給大家。 頭圖 目錄 Part 01 “大話”微前端 微前端是什么 背景 目標 達成價值 …

bcp文件, 逗號文件

bcp 實用工具 https://docs.microsoft.com/zh-cn/sql/tools/bcp-utility?viewsql-server-2017 大容量復制程序實用工具 (bcp) 可以在 Microsoft SQL Server 實例和用戶指定格式的數據文件間大容量復制數據。 使用 bcp 實用工具可以將大量新行導入 SQL Server 表&#xff0c;或…

遠程登錄和復制文件

命令&#xff1a; ssh 對應英文&#xff1a; secure shell 使用&#xff1a; ssh [-P] 用戶名ip 優點&#xff1a; 加密和壓縮&#xff0c;即安全和提高傳輸速度 注意&#xff1a; 除了windows系統外的系統默認有ssh客戶端&#xff0c;直接使用命令便可&#xff1b; windows系統…

Markdown 編輯器才是yyds|CSDN編輯器測評

前言 今天小編為大家介紹一款編輯器&#xff0c;也正是小編書寫這篇文章所使用的Markdown編輯器&#xff0c;正是廣大博友想要發布文章的工具。那么 你知道他的都有哪些方便之處么 下面小編帶你了解一下 Markdown是什么 Markdown是一種輕量標記語言,通過簡單的語法&#xff…

JVM對象已死

(一) 引用計數法 每有一個引用就加1&#xff0c;每失效一個就減1&#xff0c;為0表示可回收&#xff1b;但是此方法無法解決相互引用的情況 (二) 根搜索算法 從一系列的GCRoots對象為起點向下搜索&#xff0c;搜索的路徑稱為引用鏈&#xff0c;當一個對象沒有任何引…

pcl和opencv多版本共存

pcl和opencv多版本共存 在Ubuntu 16.04系統下安裝kinetic版本ROS&#xff0c; 會默認安裝opencv 3.3.1和pcl1.7. opencv安裝路徑/opt/ros/kinetic/ pcl安裝路徑/usr/ 如果想安裝opencv2.4版本&#xff0c;或者安裝pcl 1.8版本&#xff0c;那么如何設置安裝路徑&#xff0c;同時…

45天帶你玩轉Node(第三天)Node環境安裝

本篇目標 能夠搭建 Node 運行環境掌握 NodeJS 程序的運行方法理解模塊化開發理解系統模塊和第三方模塊理解package.json文件作用 1.Node 開發概述 1.1為什么要學習服務器端開發技術 前端人員為什么要學習服務器端開發技術&#xff1f; 能夠和后端程序員更加緊密的配合網站…

給頁面加速,干掉Dom Level 0 Event

現在的web應用越來越復雜,需要響應各種各樣的用戶觸發事件,因而也就不可避免的,需要給我們的html頁面上的dom元素增加事件監聽函數. 我們知道給dom元素綁定事件監聽函數的方法有如下3種: 1 : 頁面html: <button onclick”test();”></button>2: 頁面html: <bu…

系統帶你學習 WebAPIs —— 動畫篇(第六講)

Web APIs 本篇學習目標: 能夠封裝簡單動畫函數 能夠理解緩動動畫的封裝 能夠使用動畫函數 能夠寫出網頁輪播圖案例 能夠寫出移動端觸屏事件 1.1. 動畫函數封裝 1.1.1 緩動效果原理 緩動動畫就是讓元素運動速度有所變化&#xff0c;最常見的是讓速度慢慢停下來 思路&#xff…

Git使用教程:最詳細、最傻瓜、最淺顯、真正手把手教!(轉載學習)

一&#xff1a;Git是什么&#xff1f; Git是目前世界上最先進的分布式版本控制系統。 二&#xff1a;SVN與Git的最主要的區別&#xff1f; SVN是集中式版本控制系統&#xff0c;版本庫是集中放在中央服務器的&#xff0c;而干活的時候&#xff0c;用的都是自己的電腦&#xff0…

有些話別不當回事

1、別跟墮落的人比墮落。墮落起來非常容易&#xff0c;可是墮落后再想回到不墮落&#xff0c;難。不要給自己頹廢的機會。 2、不要以為躲在學校里就可以忽略外面世界的殘酷現實。競爭越來越激烈&#xff1a;人越來越多&#xff0c;職位卻越來越少。學校里固然溫柔&#xff0c;但…

看完這篇文章保你面試穩操勝券——Vue篇

? 進大廠收藏這一系列就夠了,全方位搜集總結,為大家歸納出這篇面試寶典,面試途中祝你一臂之力!,共分為四個系列 ? 本 篇 為 《 看 完 這 篇 文 章 保 你 面 試 穩 操 勝 券 》 第 一 篇 ( V