习惯了jQuery已经写好的针对class的操作,最近看书也看到了针对className的操作,但书上的没有仔细地针对各个情况进行处理,于是自己就动手写了,进行了初步的测试,暂没发现问题。如果有问题请留言
//清除结尾和开头处的空白符
if (!String.trim) {
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g, '');
};
}
/**
* 取得包含元素className的数组
* @param {Node} element
*/
function getClassName(element) {
if (!(element = $(element))) {
return false;
}
return element.className.replace(/\s+/g, ' ').split(' ');
}
/**
* 检察院苏中是否存在某个className
* @param {Node} element
* @param {String} className
* @return {Boolean}
*/
function hasClassName(element, className) {
if (!(element = $(element))) {
return false;
}
var classes = getClassName(element);
for (var i = 0; i < classes.length; i++) {
//检测className是否匹配,如果是则返回true
if (classes[i] === className) {
return true;
}
}
return false;
}
/**
* 为元素添加className
* @param element
* @param className
* @return {Boolean}
*/
function addClassName(element, className) {
if (!(element = $(element))) {
return false;
}
//将className添加到当前className的末尾
//如果没有className,则不包含空格
element.className += (element.className ? ' ' : '') + className;
return true;
}
/**
* 删除一个或多个类名
* @param element
* @param className
* @return {Boolean}
*/
function removeClassName(element, className) {
if (!(element = $(element))) {
return false;
}
className = (className || '').trim().replace(/\s+/g, ' ');
if (className === '') {
//未定义或者空的情况为删除所有类名
element.className = '';
} else if (className.indexOf(' ') !== -1) {
//对多个以空格为分隔的类名进行处理,然后迭代
var classarr = className.split(' ');
for (var i = 0; i < classarr.length; i++) {
arguments.callee(element, classarr[i]);
}
} else {
//对单个类名的处理
className = (' ' + className + ' ');
elemClass = ' ' + element.className + ' ';
if (elemClass.indexOf(className !== -1)) {
element.className = elemClass.replace(className, ' ').replace(/\s+/g, ' ').trim();
} else {
return false;
}
}
}
/**
* 切换类名
* @param element
* @param className
*/
function toggleClassName(element, className) {
if (!hasClassName(element, className)) {
addClassName(element, className);
} else {
removeClassName(element, className);
}
}