詳解原生JS動態(tài)添加和刪除類
由于需要, 給按鈕組監(jiān)聽點擊事件(要求用事件委托),當有一個按鈕被點擊時,相應的給該按鈕添加一個類(激活類),其他沒有點擊的按鈕就要移出該類
添加和和刪除類有三種方法
首先等到一個 dom 對象(也叫dom元素), 通過document.getElement……的幾種方法得到
如`
let element = document.getElementById("box");
1.通過類名, 獲取類名: el.className, 賦值: el.className = "className" 會覆蓋掉原來的類
2.通過屬性,獲取類名: el.getAttribute("class"); 賦值: el.setAttribute("class", "className1 className2"); 會覆蓋掉原來的類
3.通過屬性節(jié)點 attributeNode(性能差一點,但能兼容ie,getAttribute() ie 的有些版本不支持 )setAttributeNode() 方法向元素中添加指定的屬性節(jié)點。
如果這個指定的屬性已存在,則此方法會替換它。,獲取類名: getAttributeNode("class").value, 賦值:
let attr = document.createAttribute("class");
attr.nodeValue = "className";
el.setAttributeNode(attr)
4.通過 classList屬性, 獲取類名 el.classList; 追加類名: el.classList.add("className"); 刪除類 : 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語法(用ES6寫簡潔)
let myEventUtil = {
// 添加監(jiān)聽事件
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 都移除激活的類 btn-active
// console.log(this) ==> 是一個dom元素 btnGroup
// 可以通過 el.children[i]拿到具體的子元素
// 拿到子元素了可以通過 el.classList.remove("className") 刪除類
// el.classList.add("className") 來添加類
// 刪除類
let len = this.children.length;
for (let i = 0; i < len; i ++) {
this.children[i].classList.remove("btn-active");
// this.children[i].className = "btn"; // 用其中一個就行
}
// 添加類, 拿到具體的 btn 給它添加類
myEventUtil.getTarget(ev).classList.add("btn-active");
// myEventUtil.getTarget(ev).className = "btn"; // 用其中一個就行
});
以上所述是小編給大家介紹的原生JS動態(tài)添加和刪除類詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
相關文章
為JS擴展Array.prototype.indexOf引發(fā)的問題及解決辦法
這篇文章主要介紹了為JS擴展Array.prototype.indexOf引發(fā)的問題及解決辦法,需要的朋友可以參考下2015-01-01
簡單學習JavaScript中的for語句循環(huán)結構
這篇文章主要介紹了簡單學習JavaScript中的for語句循環(huán)結構,是JavaScript入門學習中的基礎知識,需要的朋友可以參考下2015-11-11
深入理解JavaScript系列(40):設計模式之組合模式詳解
這篇文章主要介紹了深入理解JavaScript系列(40):設計模式之組合模式詳解,組合模式(Composite)將對象組合成樹形結構以表示“部分-整體”的層次結構,組合模式使得用戶對單個對象和組合對象的使用具有一致性,需要的朋友可以參考下2015-03-03

