<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
注意:
ul>li 標籤屬性中 的index屬性值是串聯起ol>li與ul>li的關鍵,通過呼叫相同索引下標的陣列中的不同屬性的屬性值達到切換內容的效果。
通過事件委託找到對應的ul>li 進行css屬性的刪除與新增做到背景顏色改變和內容改變的效果。
<!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>Document</title> <style> *{ margin: 0; padding: 0; } ul,ol,li{ list-style: none; } .box{ width: 800px; height: 600px; border: 3px solid #000; margin: 50px auto; display: flex; flex-direction: column; } .box > ul{ width: 100%; height: 100px; display: flex; } .box > ul >li{ flex: 1; display: flex; justify-content: center; align-items: center; font-size: 50px; background: pink; border-right: 2px solid #000; border-bottom: 2px solid #000; color: #fff; } .box > ul >li:last-child{ border-right: none; } .box > ul >li.active{ color: red; text-decoration: underline; background: orange; } .box > ol { flex: 1; position: relative; } .box > ol >li{ width: 100%; height: 100%; position: absolute; top:0; left: 0; display: flex; justify-content: center; align-items: center; font-size: 100px; background: cyan; display: none; color: #fff; } .box > ol > li.active{ display: flex; } </style> </head> <body> <div class="box"></div> <script> // 程式導向 // 定義陣列 模擬資料庫資料 var arr1 = [ { id:1 , ulLi:'精選' , olLi:'精選內容' }, { id:2 , ulLi:'美食' , olLi:'美食內容' }, { id:3 , ulLi:'百貨' , olLi:'百貨內容' }, { id:4 , ulLi:'個護' , olLi:'個護內容' }, ]; // 獲取標籤物件 const oBox = document.querySelector('.box'); // 定義全域性變數儲存資料 let oUlLis ; let oOlLis ; // 呼叫函數 動態渲染生成頁面 setPage(); // 呼叫函數 新增事件 setEvent(); // 定義函數1 動態生成頁面 function setPage(){ // 建立固定的標籤節點 ul ol const oUl = document.createElement('ul'); const oOl = document.createElement('ol'); // 定義字串 儲存動態渲染生成的ul>li ol>li let ulLiStr = ''; let olLiStr = ''; // 迴圈遍歷陣列 根據陣列中的內容動態渲染生成li標籤 arr1.forEach( function(item,key){ // item 是 陣列單元儲存的資料 也就是 儲存資料的物件 // key 是 陣列單元的索引下標 // 第一個ul>li 有 class,active樣式 ulLiStr += key === 0 ? `<li name="ulLi" index="${key}" class="active">${item.ulLi}</li>` : `<li index="${key}" name="ulLi">${item.ulLi}</li>` ; // 第一個ol>li 有 class,active樣式 olLiStr += key === 0 ? `<li class="active">${item.olLi}</li>` : `<li>${item.olLi}</li>` ; }); console.log( ulLiStr ); console.log( olLiStr ); // 將字串寫入ul ol 標籤 oUl.innerHTML = ulLiStr ; oOl.innerHTML = olLiStr ; // 將 ul ol 標籤 寫入 div標籤中 oBox.appendChild( oUl ); oBox.appendChild( oOl ); // 獲取所有的ul>li oUlLis = oUl.querySelectorAll('li'); // 獲取所有的ol>li oOlLis = oOl.querySelectorAll('li'); } // 定義函數2 給標籤新增事件 // 引數 繫結事件的事件型別 可以是click mouseover 預設值是 mouseover function setEvent( event = 'mouseover' ){ // 給 父級標籤 新增 事件 通過事件委託完成效果 oBox.addEventListener( event , function(e){ if( e.target.getAttribute('name') === 'ulLi' ){ // 清除所有 ul>li 的 class,active oUlLis.forEach( function(item , key){ // item 是 ul>li中 li標籤物件 // key 是 ul>li中 li標籤物件的索引下標 // 同時也是 ol>li中 li標籤物件的索引下標 item.classList.remove('active'); // key是ul>li的索引下標 也就是ol>li的索引下標 // oOlLs陣列可以通過索引下標 獲取到 ol>li標籤物件 oOlLis[key].classList.remove('active'); }) // 給觸發事件的ul>li標籤新增class,active e.target.classList.add('active'); // 給觸發事件的ul>li標籤 對應的ol>li標籤新增class,active // 也就是和 e.target 觸發事件標籤 索引下標相同的 ol>li標籤 // 也就是獲取 e.target標籤 index屬性的屬性值 // 標籤屬性的屬性值 都是 字串型別 需要轉化為數值型別 oOlLis[ Number( e.target.getAttribute('index') ) ].classList.add('active'); } }) } </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>Document</title> <style> * { margin: 0; padding: 0; } ul, ol, li { list-style: none; } .box { width: 800px; height: 600px; border: 3px solid #000; margin: 50px auto; display: flex; flex-direction: column; } .box>ul { width: 100%; height: 100px; display: flex; } .box>ul>li { flex: 1; display: flex; justify-content: center; align-items: center; font-size: 50px; background: pink; border-right: 2px solid #000; border-bottom: 2px solid #000; color: #fff; } .box>ul>li:last-child { border-right: none; } .box>ul>li.active { color: red; text-decoration: underline; background: orange; } .box>ol { flex: 1; position: relative; } .box>ol>li { width: 100%; height: 100%; position: absolute; top: 0; left: 0; display: flex; justify-content: center; align-items: center; font-size: 100px; background: cyan; display: none; color: #fff; } .box>ol>li.active { display: flex; } </style> </head> <body> <div class="box"></div> <!-- 匯入外部檔案 --> <script src="./tab.js"></script> <script> // 定義陣列 模擬資料庫資料 const arr1 = [ { id: 1, ulLi: '精選', olLi: '精選內容' }, { id: 2, ulLi: '美食', olLi: '美食內容' }, { id: 3, ulLi: '百貨', olLi: '百貨內容' }, { id: 4, ulLi: '個護', olLi: '個護內容' }, ]; // 獲取標籤物件 const oBox = document.querySelector('.box'); // ES6 建構函式 通過建構函式生成範例化物件 const obj = new CreateTabObj(oBox, arr1); // 呼叫動態生成函數 obj.setPage(); // 呼叫點選事件函數,引數為事件型別 obj.setEvent("click"); </script> </body> </html>
外連建構函式程式碼:
// 在外部檔案中定義建構函式 class CreateTabObj{ // 構造器 定義屬性和屬性值 // element 建立生成索引標籤的標籤物件 // msgArr 生成選項開內容的陣列 constructor( element , msgArr ){ this.ele = element ; this.arr = msgArr ; // 定義屬性 儲存 程式導向中 需要的全域性變數 this.oUlLis; this.oOlLis; } // 構造器外定義函數方法 // 函數1 動態生成頁面 setPage(){ // 建立固定的標籤節點 ul ol const oUl = document.createElement('ul'); const oOl = document.createElement('ol'); // 定義字串 儲存動態渲染生成的ul>li ol>li let ulLiStr = ''; let olLiStr = ''; // 迴圈遍歷陣列 根據陣列中的內容動態渲染生成li標籤 // 之前是 直接呼叫 變數 arr1 中 儲存的資料 // 現在是 呼叫 範例化物件中arr屬性儲存的資料 // arr1 ---> this.arr this.arr.forEach( function(item,key){ // item 是 陣列單元儲存的資料 也就是 儲存資料的物件 // key 是 陣列單元的索引下標 // 第一個ul>li 有 class,active樣式 ulLiStr += key === 0 ? `<li name="ulLi" index="${key}" class="active">${item.ulLi}</li>` : `<li index="${key}" name="ulLi">${item.ulLi}</li>` ; // 第一個ol>li 有 class,active樣式 olLiStr += key === 0 ? `<li class="active">${item.olLi}</li>` : `<li>${item.olLi}</li>` ; }); // 將字串寫入ul ol 標籤 oUl.innerHTML = ulLiStr ; oOl.innerHTML = olLiStr ; // 將 ul ol 標籤 寫入 div標籤中 // 標籤物件 ---> this.ele this.ele.appendChild( oUl ); this.ele.appendChild( oOl ); // 獲取所有的ul>li this.oUlLis = oUl.querySelectorAll('li'); // 獲取所有的ol>li this.oOlLis = oOl.querySelectorAll('li'); } // 函數2 新增事件 // 設定引數 儲存事件型別 可以是 click 可以是 mouseover 預設值是 mouseover setEvent( event = 'mouseover' ){ // class 建構函式中 this指向 預設是 物件 console.log( this); // 給 父級標籤 新增 事件 通過事件委託完成效果 // 提前定義一個變數 儲存 原始this指向 const _this = this ; // 事件繫結 中 this指向改變 this.ele.addEventListener( event , function(e){ // 事件繫結中 this指向 預設是 事件源 // 不再是 物件 // 也就是在 事件繫結中 this.屬性 不能 正確呼叫物件中的資料 if( e.target.getAttribute('name') === 'ulLi' ){ // 清除所有 ul>li 的 class,active _this.oUlLis.forEach( function(item , key) { // 給 ul>li 清除 class,active item.classList.remove('active'); // 給 索引下標相同的 ol>li 清除 class,active _this.oOlLis[key].classList.remove('active'); }) // 給 點選的 ul>li 新增 class,active e.target.classList.add('active'); // 給 點選的 ul>li 索引下標 相同的 ol>li 新增 class,active _this.oOlLis[ Number( e.target.getAttribute('index') ) ].classList.add('active'); } }) } }
執行結果:
到此這篇關於JavaScript實現索引標籤功能(程式導向與物件導向)的文章就介紹到這了,更多相關JavaScript 索引標籤內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45