let element = document.getElementById("box");
通过类名, 获取类名: el.className
, 赋值: el.className = "className"
会覆盖掉原来的类
通过属性,获取类名: el.getAttribute("class");
赋值: el.setAttribute("class", "className1 className2");
会覆盖掉原来的类
通过属性节点 attributeNode
(性能差一点,但能兼容ie,getAttribute()
ie 的有些版本不支持 )setAttributeNode()
方法向元素中添加指定的属性节点。
如果这个指定的属性已存在,则此方法会替换它。,获取类名: getAttributeNode("class").value
, 赋值:
let attr = document.createAttribute("class");
attr.nodeValue = "className";
el.setAttributeNode(attr)
通过 classList属性, 获取类名 el.classList;
追加类名: el.classList.add("className");
删除类 : el.calssList.remove("className");
上边四种方法, classList最灵活,最好好用, 但是不支持 ie9 以下的浏览器, 兼容性要差一些
代码如下:
<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 = {
addEvent (element, type, handler) {
if (element.addEventListener) {
element.addEventListener(type, handler, false);
} else if (element.attach){
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) {
let len = this.children.length;
for (let i = 0; i < len; i ++) {
this.children[i].classList.remove("btn-active");
myEventUtil.getTarget(ev).classList.add("btn-active");
});