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