Created
March 3, 2012 17:07
-
-
Save mytharcher/1967036 to your computer and use it in GitHub Desktop.
jslib原版不依赖Set类的dom.ClassName实现
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* 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