类名操作
在前端中,我们常常需要进行类名操作,大致有以下4种
-
Has(el, class)
检查el的类中是否包含class类名 -
Add(el, class)
向el类中添加class类名 -
Remove(el, class)
从el类中移除class类名 -
Toggle(el, class)
如果el中包含class,就移除它,反之,添加它
类名操作的意义
通过类名操作,我们可以改变元素的类名,进而改变元素的行为和渲染方式。
类名操作的例子
编写一个modal插件时,.open
类的css样式中包含opacity: 1
属性,而.close
中包含opacity:0
。我们可以通过增添或者移除(toggle)div.modal
元素的open和close类名,来控制div.modal
元素的可见性。
增减类名同样可以触发transition事件,编写.close
和.open
中的transition
属性可以达到定制动画效果。
类名操作相关的webAPI
classList
API
- add
- remove
- item
- toggle
- contains
classList包含了完整的类名操作函数,但不一定兼容所有浏览器。
className
API
返回class属性的值
使用正则表达式编写完整API
inspired by bonzo
首先定义寻找类-正则表达式
var classReg = function(className){
return new RegExp("(^|\\s+)"+className+"(\\s+|$)");
}
- has
var has = function(element, className) {
return classReg(className).test(element.className);
}
- add
var add = function(element, className){
if( !has(element, className) ) {
element.className += ' '+className;
}
}
- remove
var remove = function(element, className) {
element.className = element.className.replace(classReg(className), ' ');
}
- toggle
var toggle = function(element, className) {
var fn = has(element,className)?remove:add;
fn(element, className);
}
通过库或者自行实现API,我们可以使用className来进行类名操作。