1 (function(){
2 var batch = function(){};
3 batch.prototype={
4 ready : function(fn){
5 var self=this;
6 self.bind(window,'load',fn);
7 },
8 extend : function(target,source,o){
9 var s = source || {},o = o || {};
10 for(var key in s){
11 target.prototype[key] = s[key];
12 }
13 for(var key in o){
14 target.prototype[key] = o[key];
15 }
16 return target;
17 },
18 bind : function(o,type,fn){
19 if(document.attachEvent){
20 o.attachEvent('on'+type,fn);
21 }else if(document.addEventListener){
22 o.addEventListener(type,fn,false);
23 }
24 },
25 die : function(o,type,fn){
26 if(document.detachEvent){
27 o.detachEvent('on'+type,fn);
28 }else if(document.removeEventListener){
29 o.removeEventListener(type,fn,false);
30 }
31 },
32 hasClass : function(sClass,o){
33 if(!o.className)return false;
34 var str = ' '+o.className+' ',s=' '+sClass+' ';
35 if(str.indexOf(s) != -1){
36 return true;
37 }else{
38 return false;
39 }
40 },
41 removeClass : function(sClass,o){
42 var self=this;
43 if(!o.className && !self.hasClass(sClass,o))return;
44 var str = ' '+o.className+' ',reg = new RegExp(' '+sClass+' ','g');
45 str = str.replace(reg,' ');
46 str = str.slice(1,str.length-1);
47 o.className = str;
48 },
49 addClass : function(sClass,o){
50 var self=this;
51 if(o.className && self.hasClass(sClass,o))return;
52 var s = o.className || '';
53 s = s + ' ' + sClass;
54 o.className = s;
55 },
56 get : function(s,o){
57 var self = this,o=o||document.body,tag = tag || '';
58 if(s.charAt(0) == '#'){
59 return self.getId(s.slice(1));
60 }else if(s.indexOf('.') != -1){
61 return self.getClass(s.slice(1),o);
62 }
63 },
64 getId : function(id){
65 return (document.getElementById(id) || null);
66 },
67 getClass : function(sClass,o){
68 var o = o || document.body,self = this;
69 var child = o.getElementsByTagName('*'),result = [];
70 for(var i=0;i<child.length;i++){
71 if(self.hasClass(sClass,child[i])){
72 result.push(child[i]);
73 }
74 }
75 return result;
76 },
77 attr : function(o,name,value){
78 var self = this;
79 if(arguments.length == 2){
80 return self.getAttr(o,name);
81 }else if(arguments.length == 3){
82 self.setAttr(o,name,value);
83 }
84 },
85 getAttr : function(o,name){
86 return o.getAttribute(name);
87 },
88 setAttr : function(o,name,value){
89 o.setAttribute(name,value);
90 },
91 elt : function(tag,sClass,text,css){//div,class,innerhtml,css
92 var tag = tag.toLowerCase(),o = document.createElement(tag);
93 if(sClass)o.className=sClass;
94 if(text){
95 if( tag == 'input' || tag == 'textearea'){
96 o.value = text;
97 }else{
98 if(typeof text == 'string'){
99 o.innerHTML = text;
100 }else{
101 o.appendChild(text);
102 }
103 }
104 }
105 if(css)o.style.cssText = css;
106 return o;
107 },
108 parent : function(o){//dom
109 return o.parentNode;
110 },
111 parents : function(o,tag){//"#id || #id:first || #id:last || .class || .class:first || .class:last || div || div:first || div:last"
112 var tagName = false,sClass=false,sId=false,self=this,result=[],temp='',condition="",obj=o;
113 if(tag.charAt(0) == '#'){
114 sId = true;
115 temp = tag.slice(1);
116 }else if(tag.charAt(0) == '.'){
117 sClass = true;
118 temp = tag.slice(1);
119 }else{
120 tagName = true;
121 temp = tag;
122 }
123 if(temp.indexOf(':') != -1){
124 condition = temp.slice(temp.indexOf(':')+1);
125 temp = temp.slice(0,temp.indexOf(':'));
126 }
127 if(sClass){
128 while(obj.parentNode.nodeName != 'BODY'){
129 var tempO = obj.parentNode;
130 if(self.hasClass(temp,tempO)){
131 if(condition != '' && condition == 'first'){
132 result.push(tempO);
133 break;
134 }else{
135 result.push(tempO);
136 }
137 }
138 obj = tempO;
139 }
140 }else if(tagName){
141 while(obj.parentNode.nodeName != 'BODY'){
142 var tempO = obj.parentNode;
143 if(tempO.nodeName.toLowerCase() == temp.toLowerCase()){
144 if(condition != '' && condition == 'first'){
145 result.push(tempO);
146 break;
147 }else{
148 result.push(tempO);
149 }
150 }
151 obj = tempO;
152 }
153 }else if(sId){
154 while(obj.parentNode.nodeName != 'BODY'){
155 var tempO = obj.parentNode;
156 if(tempO.id == temp){
157 if(condition != '' && condition == 'first'){
158 result.push(tempO);
159 break;
160 }else{
161 result.push(tempO);
162 }
163 }
164 obj = tempO;
165 }
166 }
167
168 if(condition =='last'){
169 return result[result.length-1];
170 }else{
171 return result;
172 }
173 },
174 find : function(tag,o){
175 var self=this,o=o||document.body,sClass=false,sId=false,sTag=false,temp='',condition='',result=[];
176 if(tag.charAt(0) == '.'){
177 sClass = true;
178 }else if(tag.charAt(0) == '#'){
179 sId = true;
180 }else{
181 sTag = true;
182 }
183 if( tag.indexOf(':') != -1 ){
184 temp = sTag?tag.slice(0,tag.indexOf(':')):tag.slice(1,tag.indexOf(':'));
185 condition = tag.slice(tag.indexOf(':')+1);
186 }else{
187 temp = sTag?tag:tag.slice(1);
188 }
189 if(sClass){
190 result = self.getClass(temp,o);
191 }else if(sId){
192 result = self.getId(temp);
193 }else{
194 result=o.getElementsByTagName(temp);
195 }
196 switch (condition){
197 case 'first':
198 result = result[0]?result[0]:[];
199 break;
200 case 'last':
201 result = result[result.length-1];
202 break;
203 default :
204 break;
205 }
206 return result;
207 }
208 };
209
210 window.Batch = new batch();
211 })(window)