以下原始碼與想法,參考自 Sitepoint:Add or Remove a CSS Class with Vanilla JavaScript 並作改寫,為了撰寫方便,使用 ES6 語法,如需支援古老瀏覽器,仍需經過 Babel 轉換。
如果不使用 jQuery,只想用 Vanilla Javascript 來新增移除Class
,我們可以利用className
(IE8+)或classList
(IE10+)來實作。
IE8+
addClass
const addClass = (el, myClass) => {
//檢查element是否存在
if (!el) {
return;
}
//取得所有element(s)
if (typeof(el) === 'string') {
el = document.querySelectorAll(el);
} else if (el.tagName) {
el = [el];
}
for (let i = el.length - 1; i >= 0; i--) {
//檢查欲新增的class是否已經存在
//注意前後的space,這樣可以避免使用RegExp
if ((` ${el[i].className} `).indexOf(` ${myClass} `) < 0) {
el[i].className += ` ${myClass}`;//key code
}
}
}
removeClass
const removeClass = (el, myClass) => {
//檢查element是否存在
if (!el) {
return;
}
//取得所有element(s)
if (typeof(el) === 'string') {
el = document.querySelectorAll(el);
} else if (el.tagName) {
el = [el];
}
//利用RegExp找到此class
let reg = new RegExp(`(^| )${myClass}($| )`, 'g')
for (let i = el.length - 1; i >= 0; i--) {
el[i].className = el[i].className.replace(reg, ' ');//key code
}
}
IE10+
addClass
const addClass = (selector, myClass) => {
//取得所有element(s)
el = document.querySelectorAll(selector);
for (let i = el.length - 1; i >= 0; i--) {
el[i].classList.add(myClass);//key code
}
}
removeClass
const removeClass = (selector, myClass) => {
//取得所有element(s)
el = document.querySelectorAll(selector);
for (let i = el.length - 1; i >= 0; i--) {
el[i].classList.remove(myClass);//key code
}
}