/*
* mj JavaScript Library v0.1
* Copyright 2012, Maple Jan
* About:一个极简的工具库,简化常用DOM操作。
*/
var mj = new function() {
//遍历指定元素的所有后代元素
var eachChild = function(elem, arr) {
var child = elem.childNodes,
cLength = child.length;
if(cLength === 0) {
return arr;
}
for(var i = 0; i < cLength; i++) {
if(child[i].nodeType === 1) {
arr.push(child[i]);
eachChild(child[i], arr);
}
}
return arr;
};
this.getId = function(id) {
return document.getElementById(id);
};
this.getTag = function(elem, tag) {
return elem.getElementsByTagName(tag);
};
this.getClass = function(elem, classname){
var childArr = eachChild(elem, []),
childArrLength = childArr.length,
matchChildArr = [];
for(var i = 0; i < childArrLength; i++) {
if(childArr[i].className !== "") {
var classArr = childArr[i].className.split(/\s+/),
classArrLength = classArr.length;
for(var j = 0; j < classArrLength; j++) {
if(classname === classArr[j]) {
matchChildArr.push(childArr[i]);
break;
}
}
}
}
return matchChildArr;
};
//子元素添加到父元素内的最后位置
this.append = function(father, child) {
var cate = typeof child;
switch(cate) {
case "object":
father.appendChild(child);
return father;
case "string":
father.innerHTML += child;
return father;
default:
console.error("第二个参数必须为DOM对象或字符串!");
}
};
//子元素添加到父元素内的第一位
this.prepend = function(father, child) {
var cate = typeof child;
switch(cate) {
case "object":
father.insertBefore(child, father.firstChild);
return father;
case "string":
father.innerHTML = child + father.innerHTML;
return father;
default:
console.error("第二个参数必须为DOM对象或字符串!");
}
};
//添加类名
this.addClass = function(elem, classname) {
if(typeof classname === "string") {
var addClassArr = classname.split(/\s+/),
hadClassArr = elem.className.split(/\s+/);
for(var j = 0; j<addClassArr.length; j++) {
var check = 1;
for(var i = 0; i < hadClassArr.length; i++) {
if(addClassArr[j] === hadClassArr[i]) {
check = 0;
}
}
if(check != 0) {
hadClassArr.push(addClassArr[j]);
}
}
var str = hadClassArr.join(" ");
elem.className = str;
return elem;
} else {
console.error("第二个参数必须是字符串!");
}
};
//删除类名
this.removeClass = function(elem, classname) {
var cate = typeof classname;
switch(cate) {
case "undefined":
elem.className = "";
return elem;
case "string":
var addClassArr = classname.split(/\s+/),
hadClassArr = elem.className.split(/\s+/),
str;
for(var j = 0; j < addClassArr.length; j++) {
for(var i = 0; i < hadClassArr.length; i++) {
if(addClassArr[j] === hadClassArr[i]) {
hadClassArr.splice(i,1);
}
}
}
var str = hadClassArr.join(" ");
elem.className = str;
return elem;
default:
console.error("第二个参数必须是字符串!");
}
};
}
PS: 目前getClass的性能很差