Skip to content

Instantly share code, notes, and snippets.

@mytharcher
Created March 3, 2012 17:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mytharcher/1967036 to your computer and use it in GitHub Desktop.
Save mytharcher/1967036 to your computer and use it in GitHub Desktop.
jslib原版不依赖Set类的dom.ClassName实现
/*
* elf JavaScript Library
*
* create:
* @2010-2-27 By mytharcher
*
* update:
* @2010-04-12 By mytharcher
* @2010-04-20 By mytharcher
* @2010-04-27 By mytharcher
* @2010-11-17 By mytharcher
*/
///import elf.util.Type;
///import elf.dom;
/**
* @class elf.dom.ClassName
* DOM元素的class属性管理类
* @singleton
*/
elf.dom.ClassName = elf.dom.ClassName || {
/**
* 对一个DOM元素添加class
* @static
*
* @param {String/Element} element DOM元素
* @param {String/Array} cls 要添加的class
*
* @return {String} 返回添加后的className
*/
add: function (element, cls) {
var isString = elf.util.Type.isString(element);
var curName = isString ? element : element.className;
var cls = cls instanceof Array ? cls : cls.split(/ +/);
curName = ' ' + curName + ' ';
for (var i = 0, len = cls.length; i < len; i++) {
if (curName.indexOf(' ' + cls[i] + ' ') < 0) {
curName = ' ' + (curName += (curName ? ' ' : '') + cls[i]) + ' ';
}
}
curName = curName.trim();
if (!isString) {
element.className = curName;
}
return curName;
},
/**
* 对一个DOM元素移除class
* @static
*
* @param {String/Element} element DOM元素或字符串
* @param {String/Array} cls 要移除的class,可以是多个className拼接的字符串,也可以是数组
*
* @return {String} 返回移除后的className
*/
remove: function (element, cls) {
var isString = elf.util.Type.isString(element);
var curName = isString ? element : element.className;
var cls = cls instanceof Array ? cls : cls.split(/\s+/);
curName = curName.replace(new RegExp('(^| +)(' + cls.join('|') + ')( +|$)', 'g'), ' ');
if (!isString) {
element.className = curName;
}
return curName;
},
/**
* 判断一个DOM元素或一个字符串内是否存在指定的className
* @static
*
* @param {String/Element} element DOM元素或者需要检测的字符串
* @param {String/Array} cls 要判断的class,可以是多个className拼接的字符串,也可以是数组
*
* @return {Boolean} 存在为true,不存在为false,只要有一个className不存在即为false
*/
has: function (element, cls) {
var name = elf.util.Type.isString(element) ? element : element.className;
var cls = cls instanceof Array ? cls : cls.split(/\s+/);
var curName = ' ' + name + ' ';
var find = true;
for (var i = 0, len = cls.length; i < len; i++) {
if (curName.indexOf(' ' + cls[i] + ' ') < 0) {
find = false;
break;
}
}
return find;
},
/**
* className开关
* @static
*
* 如果设置了on参数,则按on添加或删除className,否则如果存在className则删除,反之添加
*
* @param {String/Element} element DOM元素或者需要添加/删除的字符串
* @param {String/Array} cls 要添加/移除的class,可以是多个className拼接的字符串,也可以是数组
* @param {Boolean} on 开关项,默认不使用,如果设置了,将强制按on设置的添加或删除className
*/
toggle: function (element, cls, on) {
var ClassName = elf.dom.ClassName,
curName = '';
if (elf.util.Type.isUndefined(on)) {
ClassName.toggle(element, cls, !ClassName.has(element, cls));
} else {
if (on) {
curName = ClassName.add(element, cls);
} else {
curName = ClassName.remove(element, cls);
}
}
return curName;
},
/**
* 替换className
* @static
*
* 移除oldCls,添加newCls,以达到oldCls变成newCls的效果
*
* @param {String/Element} element DOM元素或者需要检测的字符串
* @param {String/Array} oldCls 要移除的class,可以是多个className拼接的字符串,也可以是数组
* @param {String/Array} newCls 要添加的class,可以是多个className拼接的字符串,也可以是数组
*
* @return {String}
*/
replace: function (element, oldCls, newCls) {
var ClassName = elf.dom.ClassName;
ClassName.remove(element, oldCls);
return ClassName.add(element, newCls);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment