细雨水上飘

导航

 

  javascript 基础类,实现命名空间、基础比较、事件操作、ajax、dom元素操作等。

  注释及文档还未整理。

  1 /**
  2  * @说明 基础javascript 可以与jquery同时使用 基础javascript
  3  * @author xxd
  4  * @date 20140729
  5  */
  6 /**
  7  * 以 _ 开头函数为私有函数
  8  */
  9 
 10 
 11 /*命名空间函数 避免冲突*/
 12 var GLOBAL={};
 13 GLOBAL.namespace = function(str){
 14   var arr = str.split("."),o=GLOBAL;
 15   for(i=(arr[0]=="GLOBAL")?1:0;i<arr.length;i++){
 16      o[arr[i]] = o[arr[i]]||{};
 17      o =o[arr[i]];
 18   }
 19 }
 20 /*DOM对象操作*/
 21 GLOBAL.namespace("Dom");
 22 /*取得DOM节点,通过id 或者node 根据node 类型*/
 23 GLOBAL.Dom.getNextNode=function(node){
 24     node = (typeof node=="string") ? document.getElementById(node):node;
 25     var nextNode = node.nextSibling;
 26     if(!nextNode) return null;
 27     if(!document.all)
 28     {
 29        while(true)
 30        {
 31          if(nextNode.nodeType==1)
 32          {
 33             break;     
 34          }
 35          else
 36          {
 37              if(nextNode.nextSibling)
 38              {
 39                  nextNode = nextNode.nextSibling;
 40              }
 41              else
 42              {
 43                  break;     
 44              }
 45          }
 46        }
 47     }
 48     return nextNode;
 49 }
 50 /*通过类名获得Dom节点*/
 51 GLOBAL.Dom.getElementByClassName=function(str,root,tag){
 52     if(root)
 53     {
 54        root=typeof root=="string"?document.getElementById(root):root;
 55     }else
 56     {
 57        root = document.body;
 58     }
 59     tag =tag||"*";
 60     var els = root.getElementsByTagName(tag),arr=[];
 61     for(var i=0,n=els.lenght;i<n;i++)
 62     {
 63         for(var j=0,k=els[i].classname.split(" "),l=k.length;j<l;j++)
 64         {
 65             if(k[j]==str)
 66             {
 67                 arr.push(els[i]);
 68                 break;
 69             }
 70         }
 71     }
 72     return arr;
 73 }
 74 /*更具ID得到DOM*/
 75 GLOBAL.Dom.get=function(node){
 76     node = (typeof node=="string")?document.getElementById(node):node;
 77     return  node;
 78 }
 79 /*设置DOM CSS样式*/
 80 
 81 
 82 GLOBAL.Dom.setClass =function(node,str){
 83     if(!new RegExp("(^|\\s+)"+str).test(node.className))
 84     {
 85       node.className = str;    
 86     }
 87 }
 88 
 89 GLOBAL.Dom.setStyle = function(p_elem, p_styles) {
 90     var s;
 91     for (s in p_styles) {

          /*特别对float属性设置*/
         if(s==="float")
         {
          if(typeof(p_elem.style.cssFloat)!="undefined" && p_elem.style.cssFloat!=null)
            {
              p_elem.style["cssFloat"] = p_styles[s];
          }else
         {
                p_elem.style["styleFloat"] = p_styles[s];
         }
         }else
         {
             p_elem.style[s] = p_styles[s];
           }

 92         p_elem.style[s] = p_styles[s];
 93     }
 94 }
 95 
 96 
 97 GLOBAL.Dom.setAttribute = function(p_elem, p_styles) {
 98     var s;
 99     for (s in p_styles) {
100         p_elem.setAttribute(s,p_styles[s]);
101     }
102 }
103 
104 GLOBAL.Dom.addClass = function(element, classToAdd) {
105     var currentClassValue = element.className;
106     if (currentClassValue.indexOf(classToAdd) == -1) {
107         if ((currentClassValue == null) || (currentClassValue === "")) {
108             element.className = classToAdd
109         } else {
110             element.className += " " + classToAdd
111         }
112     }
113 }
114 GLOBAL.Dom.removeClass = function(element, classToRemove) {
115     var currentClassValue = element.className;
116     if (currentClassValue == classToRemove) {
117         element.className = "";
118         return
119     }
120     var classValues = currentClassValue.split(" ");
121     var filteredList = [];
122     for (var i = 0; i < classValues.length; i++) {
123         if (classToRemove != classValues[i]) {
124             filteredList.push(classValues[i])
125         }
126     }
127     element.className = filteredList.join(" ")
128 }
129 GLOBAL.Dom.addStyleNode = function(strCss)
130 {   
131     var styleNode = document.createElement("style");
132     styleNode.type = "text/CSS";
133     if(styleNode.styleSheet)
134         {
135            styleNode.styleSheet.cssText = strCss;
136         }
137     else
138         {
139           styleNode.innerHTML = strCss;
140         }
141     document.getElementsByTagName("head")[0].appendChild(styleNode);
142     }
143 
144 
145 /*操作类*/
146 GLOBAL.namespace("TOOL");
147 /*设置节点透明度*/
148 GLOBAL.TOOL.setOpactity=function(node,level){
149     node = (typeof node=="string")?document.getElementById(node):node;
150     if( document.all)
151     {
152         node.style.filter = 'alpha(opacity='+level+')';
153     }else
154     {
155         node.style.opacity=level/100;
156     }
157 }
158 
159 GLOBAL.TOOL.trim=function(ostr)
160 {
161     return ostr.replace(/^\s+|\s+$/g,"");
162 }
163 GLOBAL.TOOL.isNumber=function(s)
164 {
165     return !isNaN(s);
166 }
167 GLOBAL.TOOL.isString=function(s)
168 {
169    return typeof s==="string";    
170 }
171 GLOBAL.TOOL.isBoolean=function(s)
172 {
173     return typeof s==="boolean";
174 }
175 GLOBAL.TOOL.isFunction=function(s)
176 {
177     return typeof s==="function";
178 }
179 GLOBAL.TOOL.isNull=function(s)
180 {
181     return s===null;
182 }
183 
184 GLOBAL.TOOL.isUndefined=function(s)
185 {
186     return typeof s==="undefined";
187 }
188 
189 GLOBAL.TOOL.isEmpty=function(s)
190 {
191     return /^\s*$/.test(s);
192 }
193 
194 GLOBAL.TOOL.isArray=function(s)
195 {
196     return s instanceof Array;
197 }
198 
199 GLOBAL.TOOL.cutString=function(str, len) {
200     if(str.length*2 <= len) {
201         return str;
202     }
203     var strlen = 0;
204     var s = "";
205     for(var i = 0;i < str.length; i++) {
206         s = s + str.charAt(i);
207         if (str.charCodeAt(i) > 128) {
208             strlen = strlen + 2;
209             if(strlen >= len){
210                 return s.substring(0,s.length-1) + "...";
211             }
212         } else {
213             strlen = strlen + 1;
214             if(strlen >= len){
215                 return s.substring(0,s.length-2) + "...";
216             }
217         }
218     }
219     return s;
220 }
221 /**时间间隔函数interval :D表示查询精确到天数的之差
222 
223 interval :H表示查询精确到小时之差
224 
225 interval :M表示查询精确到分钟之差
226 
227 interval :S表示查询精确到秒之差
228 
229 interval :T表示查询精确到毫秒之差**/
230 GLOBAL.TOOL.dateDiff=
231 function(interval, date1, date2)
232 {
233    var objInterval = {'D':1000 * 60 * 60 * 24,'H':1000 * 60 * 60,'M':1000 * 60,'S':1000,'T':1};
234    interval = interval.toUpperCase();
235    var dt1 = date1;
236    var dt2 = date2;
237    try
238    {
239       //alert(dt2.getTime() - dt1.getTime());
240       //alert(eval_r('objInterval.'+interval));
241       //alert((dt2.getTime() - dt1.getTime()) / eval_r('objInterval.'+interval));
242       return Math.round((dt2.getTime() - dt1.getTime()) / eval('objInterval.'+interval));
243     }
244     catch (e)
245     {
246       return e.message;
247     }
248 }
249 
250 
251 /*继承*/
252 GLOBAL.TOOL.extend=function(subClass,superClass)
253 {
254     var F=function(){};
255     F.prototype=superClass.prototype;
256     subClass.prototype = new F();
257     subClass.prototype.constructor = subClass;
258     subClass.superclass = superClass.prototype;
259     if(superclass.prototype.constructor == Object.prototype.constructor)
260     {
261       superclass.prototype.constructor = superClass;
262     }
263 }
264 /*
265  * @parameters 为一个对象
266  * 返回一个带值的url字符串
267 */
268 GLOBAL.TOOL.creatGETParam=function(url,parameters)
269 {
270    var rtnStr= null;
271    var tmpStr='',str;
272    var i = 0;
273    rtnStr = url+"?";
274    for (var key in parameters) {
275         str = escape(key) +"="+escape(parameters[key]);
276         if(i==0)
277         {
278             tmpStr+=str;
279             i++;
280         }
281         else{
282             tmpStr+='&'+str;
283         }
284    }
285    rtnStr+=tmpStr;
286    return rtnStr;
287 }
288 
289 GLOBAL.TOOL.cratePOSTParam=function(parameters)
290 {
291     var rtnStr ='';
292     var i = 0;
293     var tmpStr='',str;
294     for(var key in parameters)
295     {
296         str = escape(key) +"="+escape(parameters[key]);
297         if(i==0)
298             {
299              tmpStr+=str;
300              i++;
301             }
302         else 
303             {
304              tmpStr+='&'+str;
305             }
306     }
307     return tmpStr;
308 }
309 
310 //查找字符    
311 GLOBAL.TOOL.isHasStr =function(s,sfind)
312 {
313     if(typeof s==="string" && typeof sfind=="string")
314     {   
315         if(s.search(sfind)!=-1)
316         {
317             return true;
318         }
319     }
320     return false;
321 }
322  
323 //获取元素或窗口的scrollTop 和 scrollleft  IE 8+ firefox 
324 GLOBAL.TOOL.getScrollOffsets=function(w){
325     var w = w || window;
326     if (w.pageXoffset != null) {
327         return { x: w.pageXoffset, y: pageYoffset};
328     }
329     var d = w.document;
330     return {x:d.documentElement.scrollLeft?d.documentElement.scrollLeft:d.body.scrollLeft,y:d.documentElement.scrollTop?d.documentElement.scrollTop:d.body.scrollTop};
331 }
332 /*获取实际内容大小*/
333 GLOBAL.TOOL.getNodeScrollSize = function(w) {
334     var w = w;
335     return {
336         w: w.scrollWidth>w.clientWidth?w.scrollWidth:w.clientWidth,
337         h: w.scrollHeight>w.clientHeight?w.scrollHeight:w.clientHeight
338     }
339 }
340 
341 GLOBAL.TOOL.getNodeClientSize = function(w) {
342     var w = w;
343     return {
344         w: w.clientWidth,
345         h: w.clientHeight
346     }
347 }
348 //获取浏览器窗口大小 
349 GLOBAL.TOOL.getViewPortSize=function(w){
350     var w = w || window;
351     if (w.innerWidth != null)
352         return { w: w.innerWidth, h: w.innerHeight };
353     var d = w.document;
354     if (document.compatMode == "CSS1Compat")
355         return { w: d.documentElement.clientWidth, h: d.documentElement.clientHeight };
356     return { w: d.body.clientWidth, h: d.body.clientHeight };
357 }
358 
359 GLOBAL.TOOL.getPosition=function(element) {
360     if(element.getBoundingClientRect) {
361         var scrollOffsets = GLOBAL.TOOL.getScrollOffsets();
362         var box = element.getBoundingClientRect();
363         if(box.x)
364         {
365          return {x:box.x + scrollOffsets.x,y:box.y + scrollOffsets.y};
366         }else
367         {
368         return{x:box.left + scrollOffsets.x,y:box.top + scrollOffsets.y};
369         }
370     }
371     var xPosition = 0;
372     var yPosition = 0;
373  
374     while(element) {
375         xPosition += (element.offsetLeft - element.scrollLeft + element.clientLeft);
376         yPosition += (element.offsetTop - element.scrollTop + element.clientTop);
377         element = element.offsetParent;
378     }
379     return { x: xPosition, y: yPosition };
380 }
381 
382 GLOBAL.TOOL.getWindowPosition = function(element) {
383     if (element.getBoundingClientRect) {
384         var box = element.getBoundingClientRect();
385         if(box.x)
386         {
387         return {
388             x: box.x,
389             y: box.y
390         }
391         }else
392         {
393         return {
394             x: box.left,
395             y: box.top
396         }
397         }
398     }
399     var xPosition = 0;
400     var yPosition = 0;
401     while (element) {
402         xPosition += (element.offsetLeft - element.scrollLeft + element.clientLeft);
403         yPosition += (element.offsetTop - element.scrollTop + element.clientTop);
404         element = element.offsetParent
405     }
406     return {
407         x: xPosition,
408         y: yPosition
409     }
410 }
411 
412 GLOBAL.TOOL.parsePx=function(paramter) {
413     var res = 0;
414     if (typeof(paramter) == "string" && paramter != null && paramter != "" ) {
415         var p = paramter.indexOf("px");
416         if (p >= 0) {
417             res = parseInt(paramter.substring(0, p));
418         }
419     }
420     return res;
421 }
422 /*事件操作*/
423 GLOBAL.namespace("Event");
424 
425 /*获取事件对象*/
426 GLOBAL.Event.getEventTarget=function(e){
427     e = window.event||e;
428     return e.srcElement||e.target;
429 }
430 
431 GLOBAL.Event.getEvent = function(e)
432 {
433     return e ? e : window.event;
434 }
435 /*事件冒泡*/
436 GLOBAL.Event.stopPropagation=function(e)
437 {
438     e = window.event||e;
439     if(document.all)
440     {
441       e.cancelBubble = true;    
442     }
443     else
444     {
445         e.stopPropagation();
446     }
447 }
448 
449 GLOBAL.Event.preventDefault = function(e)
450 {    
451      if (e.preventDefault){
452        e.preventDefault();
453      } else {
454       e.returnValue = false;
455      }
456 }
457 /*添加事件*/
458 GLOBAL.Event.on=function(node,eventType,handler,scope){
459     node = typeof node == "string" ? document.getElementById(node) : node;
460     scope = scope || node;
461     var callHandler = function() {
462             handler.apply(scope, arguments);
463         };
464     if (document.all) {
465         node.attachEvent("on" + eventType, callHandler);
466     } else {
467         node.addEventListener(eventType, callHandler, false);
468     }
469     return callHandler;
470 }
471 
472 GLOBAL.Event.remove = function(node, eventType, handler) {
473     node = typeof node == "string" ? document.getElementById(node) : node;
474     if (document.all) {
475         node.detachEvent("on" + eventType, handler);
476     } else {
477         node.removeEventListener(eventType, handler, false);
478     }
479 }
480 
481 /*单击与双击共存功能*/
482 GLOBAL.Event.EventClick = function(scopeclick,callclick,scopedbclick,calldbclick)
483 {
484   this._dcTime=250;          
485   this._dcAt=0;               
486   this._savEvtTime=0;   
487   this._savTO=null;
488   this._scopeclick = scopeclick;
489   this._callclick = callclick;
490   this._scopedbclick = scopedbclick;
491   this._calldbclick = calldbclick;  
492 }
493 GLOBAL.Event.EventClick.prototype.click = function(ev)
494 {
495     if(this._savEvtTime - this._dcAt <=0)
496     {
497       return false;
498     }
499     /*执行单击事件*/
500     this._callclick.apply(this._scopeclick,ev[0]);
501 }
502 GLOBAL.Event.EventClick.prototype.dbclick = function(ev)
503 {
504    var d = new Date();
505    this._dcAt = d.getTime();
506    if(this._savTO!=null){
507       GLOBAL.Timer.clearTimeout(this._savTO);
508    }
509    /*执行双击事件*/
510    this._calldbclick.apply(this._scopedbclick,ev);
511 }
512 
513 GLOBAL.Event.EventClick.prototype.handleEvent =function(ev) {
514    ev = window.event||ev;
515    switch (ev.type) {
516         case  "click" :
517             var d = new Date();
518             this._savEvtTime = d.getTime();
519             var paramter = [];
520             paramter[0] = ev;
521             this._savTO = GLOBAL.Timer.setTimeout(this.click,paramter,this._dcTime);
522             break;
523         case  "dblclick":
524             this.dbclick(ev);
525             break;
526     default:
527     }
528 }
529 
530 /*获取选中文本*/
531 GLOBAL.Event.getSelectText = function()
532 {
533     var text;
534     if (window.getSelection) {
535         text = window.getSelection();
536         return text;
537     }
538     else if (document.getSelection) {
539         text = document.getSelection();
540         return text;
541     }
542     else {
543         var selection = document.selection && document.selection.createRange();
544         text = selection.text;
545         
546         return text;
547     }
548     
549 }
550 
551 /*获取鼠标事件中鼠标document位置*/
552 GLOBAL.Event.getMouseEventDocumentPostion = function(ev)
553 {
554    ev = GLOBAL.Event.getEvent(ev);
555    if (ev.pageY) {
556         return {x:ev.pageX,y:ev.pageY};
557     } else if (ev.clientY) {
558         return {x:ev.clientX
559                 + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft
560                         : document.body.scrollLeft),y:ev.clientY
561                 + (document.documentElement.scrollTop ? document.documentElement.scrollTop
562                         : document.body.scrollTop)};
563     } else {
564         return {x:0,y:0};
565     }
566 }

 

posted on 2014-10-14 18:06  细雨水上飘  阅读(191)  评论(0)    收藏  举报