詳解原生JS動(dòng)態(tài)添加和刪除類(lèi)
由于需要, 給按鈕組監(jiān)聽(tīng)點(diǎn)擊事件(要求用事件委托),當(dāng)有一個(gè)按鈕被點(diǎn)擊時(shí),相應(yīng)的給該按鈕添加一個(gè)類(lèi)(激活類(lèi)),其他沒(méi)有點(diǎn)擊的按鈕就要移出該類(lèi)
添加和和刪除類(lèi)有三種方法
首先等到一個(gè) dom 對(duì)象(也叫dom元素), 通過(guò)document.getElement……的幾種方法得到
如`
let element = document.getElementById("box");
1.通過(guò)類(lèi)名, 獲取類(lèi)名: el.className, 賦值: el.className = "className" 會(huì)覆蓋掉原來(lái)的類(lèi)
2.通過(guò)屬性,獲取類(lèi)名: el.getAttribute("class"); 賦值: el.setAttribute("class", "className1 className2"); 會(huì)覆蓋掉原來(lái)的類(lèi)
3.通過(guò)屬性節(jié)點(diǎn) attributeNode(性能差一點(diǎn),但能兼容ie,getAttribute() ie 的有些版本不支持 )setAttributeNode() 方法向元素中添加指定的屬性節(jié)點(diǎn)。
如果這個(gè)指定的屬性已存在,則此方法會(huì)替換它。,獲取類(lèi)名: getAttributeNode("class").value, 賦值:
let attr = document.createAttribute("class"); attr.nodeValue = "className"; el.setAttributeNode(attr)
4.通過(guò) classList屬性, 獲取類(lèi)名 el.classList; 追加類(lèi)名: el.classList.add("className"); 刪除類(lèi) : el.calssList.remove("className");
上邊四種方法, classList最靈活,最好好用, 但是不支持 ie9 以下的瀏覽器, 兼容性要差一些
代碼如下:
html
<div id="btn-group"> <div class="btn btn-active">按鈕1</div> <div class="btn">按鈕2</div> <div class="btn">按鈕3</div> <div class="btn">按鈕4</div> </div>
js代碼, 其中用到了ES6語(yǔ)法(用ES6寫(xiě)簡(jiǎn)潔)
let myEventUtil = { // 添加監(jiān)聽(tīng)事件 addEvent (element, type, handler) { if (element.addEventListener) { element.addEventListener(type, handler, false); } else if (element.attach){ // ie element.attach("on"+ type, handler); } else { element['on' + type] = handler; } }, getTarget (event) { let event = event || window.event; return event.target || event.srcElement; } } let my$ = id => document.getElementById(id); let btnGroup = my$(“btn-group”); myEventUtil.addEvent(btnGroup, 'on', function (ev) { // 給所有的 btn 都移除激活的類(lèi) btn-active // console.log(this) ==> 是一個(gè)dom元素 btnGroup // 可以通過(guò) el.children[i]拿到具體的子元素 // 拿到子元素了可以通過(guò) el.classList.remove("className") 刪除類(lèi) // el.classList.add("className") 來(lái)添加類(lèi) // 刪除類(lèi) let len = this.children.length; for (let i = 0; i < len; i ++) { this.children[i].classList.remove("btn-active"); // this.children[i].className = "btn"; // 用其中一個(gè)就行 } // 添加類(lèi), 拿到具體的 btn 給它添加類(lèi) myEventUtil.getTarget(ev).classList.add("btn-active"); // myEventUtil.getTarget(ev).className = "btn"; // 用其中一個(gè)就行 });
以上所述是小編給大家介紹的原生JS動(dòng)態(tài)添加和刪除類(lèi)詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- JavaScript數(shù)組,JSON對(duì)象實(shí)現(xiàn)動(dòng)態(tài)添加、修改、刪除功能示例
- JS點(diǎn)擊動(dòng)態(tài)添加標(biāo)簽、刪除指定標(biāo)簽的代碼
- vue.js實(shí)現(xiàn)點(diǎn)擊后動(dòng)態(tài)添加class及刪除同級(jí)class的實(shí)現(xiàn)代碼
- 原生js封裝添加class,刪除class的實(shí)例
- javascript cookie的基本操作(添加和刪除)
- js實(shí)現(xiàn)添加刪除表格(兩種方法)
- JavaScript實(shí)現(xiàn)向select下拉框中添加和刪除元素的方法
相關(guān)文章
JavaScript中的數(shù)據(jù)類(lèi)型轉(zhuǎn)換方法小結(jié)
這篇文章主要介紹了JavaScript中的數(shù)據(jù)類(lèi)型轉(zhuǎn)換方法,是JavaScript入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10JavaScript必知必會(huì)(七)js對(duì)象繼承
這篇文章主要介紹了JavaScript必知必會(huì)(七)js對(duì)象繼承的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06JavaScript strike方法入門(mén)實(shí)例(給字符串加上刪除線(xiàn))
這篇文章主要介紹了JavaScript strike方法入門(mén)實(shí)例,strike方法用于給字符串加上刪除線(xiàn),需要的朋友可以參考下2014-10-10舉例講解JavaScript中將數(shù)組元素轉(zhuǎn)換為字符串的方法
這篇文章主要介紹了JavaScript中將數(shù)組元素轉(zhuǎn)換為字符串的方法,是JS入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10JS鍵盤(pán)的鍵碼(event.keyCode)圖片版
js獲取鍵盤(pán)按鍵的鍵碼event.keyCode,下面則是鍵盤(pán)的鍵碼分布,記錄一下,以備不時(shí)之需2013-01-01JavaScript的繼承實(shí)現(xiàn)小結(jié)
JavaScript作為面向?qū)ο蟮娜躅?lèi)型語(yǔ)言,繼承也是其非常強(qiáng)大的特性之一。那么如何在JS中實(shí)現(xiàn)繼承呢?本文將給大家揭開(kāi)神秘面紗2017-05-05簡(jiǎn)介JavaScript中的setHours()方法的使用
這篇文章主要介紹了簡(jiǎn)介JavaScript中的setHours()方法的使用,是JS入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06