--- tags: Javascript, disqus: hackmd --- # [JS]classList - 新增刪除class name [HTML DOM classList Property](https://www.w3schools.com/jsref/prop_element_classlist.asp) [ADD/REMOVE CLASSES WITH RAW JAVASCRIPT](https://jaketrent.com/post/addremove-classes-raw-javascript/) --- 過去習慣用JQuery的hasClass、addClass、removeClass的方法來對DOM的class name作處理。 換回原生JS後,可以使用setAttribute()、removeAttribute(),來做到,但都是指針對一個。 多個的時候就麻煩了,不過好在,還有一個更方便的方法[Element.classList](https://developer.mozilla.org/zh-TW/docs/Web/API/Element/classList),用起來就像JQ的方法一樣。 但是! IE不支援classList的方法。。。 不過網路大神就是猛,這三個方法就是瀏覽器有classList就用classList,沒有就用自己寫的。 ```javascript= function hasClass(el, className) { if (el.classList) return el.classList.contains(className); else return !!el.className.match(new RegExp('(\\s|^)' + className + '(\\s|$)')); } function addClass(el, className) { if (el.classList) el.classList.add(className); else if (!hasClass(el, className)) { el.className += " " + className; } } function removeClass(el, className) { if (el.classList) el.classList.remove(className); else if (hasClass(el, className)) { var reg = new RegExp('(\\s|^)' + className + '(\\s|$)'); el.className=el.className.replace(reg, ' '); } } ``` 使用起來就是這麼的舒服。 ```javascript= var el = document.getElementById('peace') addClass(el, 'be-still') // or removeClass(el, 'be-still') ```