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 }
浙公网安备 33010602011771号