DOM库,持续更新中。。。

  1 //2013-9-21 Seaゞ_Ysd 整理
  2 
  3 //=====================================================================================================//
  4 
  5 
  6 //字符串扩展方法:去除字符串首尾的空格
  7 String.prototype.trim=function(){
  8     var reg=/^\s+|\s+$/g;//以至少1个空格开头,以至少一到多个空格结尾
  9     return this.replace(reg,'');
 10 }
 11 //给数组扩展一个去除数组中的重复项的方法
 12 Array.prototype.distinct=function(){
 13     for(var i=0;i<this.length;i++){
 14         var a=this[i];
 15         for( var j=i+1;j<this.length;){
 16             if(a==this[j]){
 17                 this.splice(j,1)
 18             }else{
 19                 j++
 20             }
 21         }
 22     }
 23     return  this;
 24 }
 25 
 26 
 27 //=====================================================================================================//
 28 var DOM={
 29     //添加到某个节点后
 30     insertAfter:function(newNode,oldNode){
 31         /*var next=oldNode.nextSibiling;
 32         if(next){
 33             oldNode.parentNode.insetBefore(newNode,next);
 34         }else{
 35             oldNode.parentNode.appendChild(newNode)
 36         }*/
 37         //三元
 38         if(oldNode&&oldNode.nodeType===1&&newNode&&newNode.nodeType===1){
 39             oldNode.nextSibiling?oldNode.parentNode.insetBefore(newNode,next):oldNode.parentNode.appendChild(newNode);
 40         }else{
 41             throw new Error("参数传入错误");
 42         }
 43     },    
 44     //前追加
 45     prepend:function(newNode,parentNode){
 46         var Child=parentNode.firstChild;
 47         Child?parentNode.insertBefore(newNode,Child):parentNode.appendChild(newNode);    
 48     },
 49     //找出某个元素所有的哥哥节点
 50     preSiblings:function(currentEle){
 51         var pre=currentEle.previousSibiling;
 52         var a=[];
 53         while(pre){
 54             if(pre.nodeType===1){
 55                 a.unshift(pre);
 56             }
 57         pre=pre.previousSibling;    
 58         }
 59         return a;
 60     },
 61     //找出某个元素所有的弟弟节点
 62     nextSibilings:function(currentEle){
 63         var next=currentEle.nextSibiling;
 64         var a=[];
 65         while(next){
 66             if(next===1){
 67                 a.push(next);    
 68             }
 69         next=next.nextSibiling;
 70         }
 71         return a;
 72     },
 73     //z找出某个元素所有的兄弟节点
 74     sibilings:function(currentEle){
 75         return DOM.preSiblings(currentEle).concat(DOM.nextSibilings(currentEle));
 76     },
 77     //找出某个元素的上一个元素节点
 78     preEle:function(currentEle){
 79         if(currentEle.previousElementSibling){
 80             return currentEle.previousElementSibling
 81         }else{
 82             var pre=currentEle.previousSibiling;
 83             /*if(pre.nodeType==1&&pre.nodeType){
 84                 return pre;
 85             }else{
 86                 pre=pre.previousSibiling;
 87             }*/
 88             while(pre){
 89                 if(pre.nodeType===1){
 90                     return pre;
 91                 }
 92                 pre=pre.previousSibling;    
 93             }
 94             return null;//它没有哥哥元素则返回null。
 95             }
 96     },
 97     //找出某个元素的下一个元素节点
 98     nextEle:function(currentEle){
 99         if(currentEle.nextElementSibling){
100             return currentEle.nextElementSibling
101         }else{
102             var next=currentEle.nextSibiling;
103             while(next){
104                 if(next.nodeType===1){
105                     return next;
106                 }
107                 next=next.nextSibling;    
108             }
109             return null;//它没有哥哥元素则返回null。
110         }
111         
112     },
113     
114     //获得ele指定标签名为tag的子元素。tag参数如果不传,则表示获取ele的所有子元素
115     getChildren:function (ele,tag){
116         var children=ele.childNodes;//先把ele所有子节点取到
117         if(typeof tag=='string'){
118                 tag=tag.toUpperCase();
119                 var a=[];
120                 for(var i=0;i<children.length;i++){//做循环
121                     var node=children[i];
122                     if(node.nodeType==1&&node.nodeName==tag){
123                         //如果当前这个子元素的“节点类型"是1 并且 节点名是tag的值
124                         a.push(node);//则把此子节点放到数组里            
125                     }        
126                 }
127                 return a;
128                 
129         }else if(typeof tag=='undefined'){
130                 var a=[];
131                 for(var i=0;i<children.length;i++){//做循环
132                     var node=children[i];
133                     if(node.nodeType==1){
134                         a.push(node);//则把此子节点放到数组里            
135                     }        
136                 }
137                 return a;
138         }else{
139             throw new Error('tag参数类型错误!');    
140         }    
141     },
142     
143     
144     //获取元素ele的索引号
145     
146     getIndex:function(ele){
147         var nIndex=0;
148         var p=ele.previousSibling
149         while(p){
150             if(p.nodeType==1){//如果这个哥哥是元素节点,则
151                 nIndex++;//让累加一次
152             }            
153             p=p.previousSibling;//继续判断它的下一个哥哥        
154         }
155         return nIndex;    
156     },
157     
158     //给ele元素增加类样式
159     addClass:function(ele,strClass){
160         var reg=RegExp("\\b"+strClass+"\\b");
161         if(reg.test(ele.className)){
162         }else{
163             ele.className=ele.className.trim()+''+strClass;
164         }
165     },
166     
167     //给ele元素移除类样式
168     removeClass:function (ele,strClass){
169         if(!(ele&&ele.nodeType==1)){    
170             alert('第一参数ele需要是一个DOM元素对象');
171             throw new Error('第一参数ele需要是一个DOM元素对象');
172         }
173         if(typeof strClass != 'string'){
174             alert('第二参数必须为string类型');
175             throw new Error('第二参数必须为string类型');
176             
177         }
178         
179         var reg=new RegExp("\\b"+strClass+"\\b",'g');    
180         ele.className=ele.className.replace(reg,'').trim();    
181     },
182     
183     //获取某元素距离浏览器的绝对位置,相当于jQuery中的offset
184     getPosition:function(ele){
185         var x=ele.offsetLeft;
186         var y=ele.offsetTop;
187         var p=ele.offsetParent;
188         while(p&&p!=document.body){
189             if(window.navigator.userAgent.indexOf('MSIE 8.0'>-1)){
190                 x+=p.offsetLeft;
191                 y+=p.offsetTop;
192             }else{
193                 x+=p.offsetLeft+p.clientLeft;
194                 y+=p.offsertTop+p.clientTop;
195             }
196             p=p.offsetParent;
197         }
198         var obj={};
199         obj.x=x;
200         obj.y=y;
201         return obj;
202     }
203     
204 //等待更新中。。。    
205     
206     
207     
208     
209     
210     
211     
212     
213     
214     
215     
216     
217     
218     
219     
220     
221     
222     
223 };
224  
DOM总结

 

 

 

posted @ 2013-09-24 17:53  yeshuangdong  阅读(147)  评论(0)    收藏  举报