粗糙的自用JS库(第一版)

  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)

 

posted @ 2013-09-25 21:56  胡淼  阅读(264)  评论(0)    收藏  举报