Heim >Web-Frontend >js-Tutorial >(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib_javascript技巧
1/**//*------------------------------------------------------------
2 * S.Sams Lifexperience
3 * CopyRight (C) 2003-2007 S.Sams Lifexperience ScriptClassLib
4 * MSNLive: S.Sams#msn.com
5 * Http://blog.8see.net/
6 * UPdate by : 2007-01-19 转载传播请保留版权
7 *-----------------------------------------------------------*/
8
9
10/**//* $ 获取指定对象
11 @element 对象名
12 可以使用对象名集合,返回值为对象的集合
13 如果您使用了 Prototype 类库, 请把该函数注释掉
14 Sams_object.Get() 中同样实现该函数的所有功能
15*/
16function $(element) {
17 if (arguments.length > 1) {
18 for (var i = 0, elements = [], length = arguments.length; i 19 elements.push($(arguments[i]));
20 return elements;
21 }
22 if (typeof element == 'string')
23 element = document.getElementById(element);
24 return element;
25}
26
27/// 浏览器相关操作
28var Sams_browse = {
29 /**//* 检测浏览信息 */
30 checkBrowser : function ()
31 {
32 this.ver=navigator.appVersion
33 this.dom=document.getElementById?1:0
34 this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom)?1:0;
35 this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;
36 this.ie4=(document.all && !this.dom)?1:0;
37 this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;
38 this.ns4=(document.layers && !this.dom)?1:0;
39 this.mac=(this.ver.indexOf('Mac') > -1) ?1:0;
40 this.ope=(navigator.userAgent.indexOf('Opera')>-1);
41 this.ie=(this.ie6 || this.ie5 || this.ie4)
42 this.ns=(this.ns4 || this.ns5)
43 this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns5 || this.ns4 || this.mac || this.ope)
44 this.nbw=(!this.bw)
45 return this;
46 },
47
48 /**//* 设为首页
49 @url 要设为首页的地址
50 */
51 SetDefault : function ()
52 {
53 this.style.behavior='url(#default#homepage)';
54 this.setHomePage(this.GetUrl());
55 return false;
56 },
57
58 /**//* 复制指定URL地址
59 @Msg 要写入剪贴板的字符集
60 */
61 SetCopy : function (Msg){
62 if(navigator.userAgent.toLowerCase().indexOf('ie') > -1) {
63 clipboardData.setData('Text',Msg);
64 alert ("网址“"+Msg+"”
已经复制到您的剪贴板中
您可以使用Ctrl+V快捷键粘贴到需要的地方");
65 }
66 else
67 {
68 prompt("请复制网站地址:",Msg);
69 }
70 },
71
72 /**//* 加入收藏
73 @site 站点名称
74 @url 地址
75 */
76 AddBookmark : function (site, url){
77 if(navigator.userAgent.toLowerCase().indexOf('ie') > -1) {
78 window.external.addFavorite(url,site)
79 } else if (navigator.userAgent.toLowerCase().indexOf('opera') > -1) {
80 alert ("请使用Ctrl+T将本页加入收藏夹");
81 } else {
82 alert ("请使用Ctrl+D将本页加入收藏夹");
83 }
84 },
85
86 /**//* 打开Url指定宽度和高度的窗口 */
87 OpenWindows : function (url,width,height)
88 {
89 window.open(url,'newwin','width='+width+',height='+height);
90 return false;
91 },
92
93 /**//* 禁止浏览器的Javascript错误提示 */
94 CloseError : function(){
95 window.onerror = function(){return true;};
96 },
97
98 /**//* 获取浏览器URL */
99 GetUrl : function(){
100 return location.href;
101 },
102
103 /**//* 获取URL参数 */
104 GetUrlParam : function(){
105 return location.search;
106 },
107
108 /**//* 获取页面来源 */
109 GetFrom : function(){
110 return document.referrer;
111 },
112
113 /**//* 获取指定的URL参数值
114 @name 参数名
115 */
116 Request : function(name){
117 var GetUrl = this.GetUrl();
118 var Plist = new Array();
119 if(GetUrl.indexOf('?') > 0)
120 {
121 Plist = GetUrl.split('?')[1].split('&');
122 }
123 else if(GetUrl.indexOf('#') > 0)
124 {
125 Plist = GetUrl.split('#')[1].split('&');
126 }
127 if (GetUrl.length > 0)
128 {
129 for(var i=0; i
131 var GetValue = Plist[i].split('=');
132 if (GetValue[0].toUpperCase() == name.toUpperCase())
133 {
134 return GetValue[1];
135 break;
136 }
137 }
138 return;
139 }
140 },
141
142 /**//* 直接将HTML写到新窗口
143 @title 标题
144 @msg 内容
145 */
146 Popmsg : function PopIt(title,msg)
147 {
148 var popup = window.open('','popDialog','height=500,width=400,scrollbars=yes');
149 popup.document.write('
150 popup.document.close();
151 }
152};
153
154
155/// 对象操作
156var Sams_object = {
157
158 /**//* 创建一个DIV对象
159 @ID 要创建的对象ID
160 @ClassName 创建对象的Class
161 @SetValue 设置该对象值
162 @ToDiv 将对象追加到指定的对象,如指定的对象不存在,则追加在Body的后面
163 返回 创建后的对象
164 */
165 CreateDiv : function (ID,ClassName,SetValue,ToDiv){
166 var creatediv = document.createElement('div');
167 if(ID != null) creatediv.id = ID;
168 creatediv.style.position = 'absolute';
169 if(ClassName != null) creatediv.className = ClassName;
170 if(this.Get(ToDiv))
171 {
172 this.Get(ToDiv).appendChild(creatediv);
173 }
174 else
175 {
176 document.getElementsByTagName('body')[0].appendChild(creatediv);
177 }
178 this.SetValue(ID,SetValue);
179 return this.Get(ID);
180 },
181
182 /**//* 删除指定DIV对象
183 @objid 要删除的对象ID
184 返回 Bool 操作结果
185 */
186 DeleteDiv : function (objid)
187 {
188 try
189 {
190 if(this.Get(objid))
191 {
192 var GetParent = this.Get(objid).parentNode;
193 GetParent.removeChild(this.Get(objid));
194 return true;
195 }
196 else
197 {
198 return false;
199 }
200 }
201 catch(e)
202 {
203 return false;
204 }
205 },
206
207 /**//* 获取浏览器对象
208 @id 要获取的对象ID
209 可以使用对象名集合,返回值为对象的集合
210 */
211 Get : function (objid) {
212 if (arguments.length > 1) {
213 for (var i = 0, objids = [], length = arguments.length; i 214 objids.push(this.Get(arguments[i]));
215 return objids;
216 }
217 if (typeof objid == 'string')
218 {
219 if (document.getElementById) {
220 objid = document.getElementById(objid);
221 } else if (document.all) {
222 objid = document.all[objid];
223 } else if (document.layers) {
224 objid = document.layers[objid];
225 }
226 }
227 return objid;
228 },
229
230 /**//* 获取对象的值
231 @objid 对象ID
232 */
233 GetValue : function (objid) {
234 if (typeof objid == 'string')
235 {
236 var getTagName = this.Get(objid).tagName.toLowerCase();
237 if (getTagName == 'input' || getTagName == 'textarea' || getTagName == 'select')
238 {
239 return this.Get(objid).value;
240 }
241 else if (getTagName == 'div' || getTagName == 'span')
242 {
243 return this.Get(objid).innerText;
244 }
245 }
246 else if (typeof objid == 'object')
247 {
248 return objid.value;
249 }
250 },
251
252 /**//* 设置指定对象的值,实现可以直接赋值或清除操作
253 @objid 对象ID
254 @inserValue 传入值(可选项 Null:清除该ID的值, 则直接赋值)
255 */
256 SetValue: function(objid,inserValue) {
257 var getTagName = this.Get(objid).tagName.toLowerCase();
258 if (inserValue == null) inserValue = '';
259 if (getTagName == 'input' || getTagName == 'textarea')
260 {
261 this.Get(objid).value = inserValue;
262 }
263 else if (getTagName == 'div' || getTagName == 'sapn')
264 {
265
266 this.Get(objid).innerText = inserValue;
267 }
268 },
269
270 /**//* 拷贝对象值到剪贴板
271 @str 对象值
272 */
273 CopyCode : function (str) {
274 var rng = document.body.createTextRange();
275 rng.moveToElementText(str);
276 rng.scrollIntoView();
277 rng.select();
278 rng.execCommand("Copy");
279 rng.collapse(false);
280 },
281
282 /**//* 显示隐藏一个对象
283 @Objid 对象ID
284 @isshow 具体操作,指定Obj为False : none或者True : block (可选)
285 */
286 ShowHidd : function(objid,isshow){
287 if (isshow != null)
288 {
289 if(isshow)
290 {
291 this.Get(objid).style.display = 'block';
292 }
293 else
294 {
295 this.Get(objid).style.display = 'none';
296 }
297 }
298 else
299 {
300 if(this.Get(objid).style.display == 'none')
301 {
302 this.Get(objid).style.display = 'block';
303 }
304 else
305 {
306 this.Get(objid).style.display = 'none';
307 }
308 }
309 },
310
311 /**//* 当前对象是否可见
312 @objid 对象ID
313 */
314 IsVisible : function(objid){
315 if(this.Get(objid))
316 {
317 try
318 {
319 if (this.Get(objid).style.display == 'none')
320 {
321 return false
322 }
323 if(this.Get(objid).style.visibility == 'hidden')
324 {
325 return false;
326 }
327 return true;
328 }
329 catch(e)
330 {
331 return false;
332 }
333 }
334 else
335 {
336 return false;
337 }
338 }
339};
340
341/// 字符处理
342var Sams_string = {
343 /**//* 取左边的指定长度的值
344 @str 要处理的字符集
345 @n 长度
346 */
347 Left : function (str,n)
348 {
349 if(str.length > 0)
350 {
351 if(n>str.length) n = str.length;
352 return str.substr(0,n)
353 }
354 else
355 {
356 return;
357 }
358 },
359
360 /**//* 取右边的指定长度的值
361 @str 要处理的字符集
362 @n 长度
363 */
364 Right : function (str,n)
365 {
366 if(str.length > 0)
367 {
368 if(n>=str.length) return str;
369 return str.substr(str.length-n,n);
370 }
371 else
372 {
373 return;
374 }
375 },
376
377 /**//* Trim:清除两边空格
378 @str 要处理的字符集
379 */
380 Trim : function (str)
381 {
382 if (typeof str == 'string') return str.replace(/(^\s*)|(\s*$)/g, '');
383 },
384
385 /**//* LTrim:清除左边的空格
386 @str 要处理的字符集
387 */
388 Ltrim : function (str)
389 {
390 if (typeof str == 'string') return str.replace(/(^\s*)/g, '');
391 },
392
393 /**//* RTrim: 清除右边的空格
394 @str 要处理的字符集
395 */
396 Rtrim : function (str)
397 {
398 if (typeof str == 'string') return str.replace(/(\s*$)/g, '');
399 },
400
401 /**//* 清除前后的非字符
402 @str 要处理的字符集
403 */
404 strip : function(str) {
405 if (typeof str == 'string') return str.replace(/^\s+/, '').replace(/(^\s*)|(\s*$)/g, '');
406 },
407
408 /**//* 过滤字符里面的HTML标签
409 @str 要处理的字符集
410 */
411 stripTags : function(str) {
412 if (typeof str == 'string')return str.replace(/]+>/gi, '').replace(/(^\s*)|(\s*$)/g, '');
413 }
414};
415
416/// 时间相关操作
417var Sams_time = {
418 /**//* 获取当天日期 yyyy-MM-dd */
419 GetDateNow : function (){
420 var d,y,m,dd;
421 d = new Date();
422 y = d.getYear();
423 m = d.getMonth() + 1;
424 dd = d.getDate();
425 return y+"-"+m+"-"+dd;
426 },
427
428 /**//* 获取指定日期后的特定天数的日期值
429 @toDate 当前指定的日期
430 @N 要添加的日期数
431 */
432 AddDays : function(toDate,N){
433 var aDate=this._cvtISOToDate(toDate);
434 if (!aDate) return "";
435 var millis=86400000 * N;
436 aDate=new Date(aDate.getTime()+millis);
437 return this._fmtDateISO(aDate);
438 },
439 _fmtDateISO : function (aDate) {
440 with (aDate) {
441 var mm=getMonth()+1;
442 if (mm443 var dd=getDate();
444 if (dd445 return (getFullYear() + '-' + mm + '-' + dd);
446 }
447 },
448 _cvtISOToDate : function (isoDate) {
449 var atomDate= isoDate.split('-');
450 var aDate=new Date(parseInt(atomDate[0],10),parseInt(atomDate[1],10)-1,parseInt(atomDate[2],10),6,0,0);
451 return aDate;
452 }
453};
454
455/// 图像相关操作
456var Sams_media = {
457 /**//* 为单一图像添加鼠标中键放大缩小功能, 批量可以直接用 ResizeImage(指定添加该功能的图片大小:Int) 即可 (该功能只适用于IE)
458 objid 对象ID
459 */
460 ZoomFun : function(objid){
461 Sams_object.Get(objid).onmousewheel = function(){return Sams_media.imagecontrol(this);}
462 },
463
464 /**//* 重置图片尺寸同时添加放大功能 (该功能只适用于IE)
465 @IntSize 指定图像的大小
466 如果适合图像大小就添加放大缩小功能
467 */
468 ResizeImage: function (IntSize) {
469 var imgsinlog=document.getElementsByTagName('img');
470 for(j=0; j471 if (imgsinlog[j].width >= IntSize) {
472 imgsinlog[j].width = IntSize;
473 imgsinlog[j].style.cursor= 'pointer';
474 imgsinlog[j].onclick = function() {window.open(this.src);}
475 if (navigator.userAgent.toLowerCase().indexOf('ie') > -1) {
476 imgsinlog[j].title = '您可以用鼠标中键或者使用Ctrl+鼠标滚轮缩放图片,点击图片可在新窗口打开';
477 imgsinlog[j].onmousewheel = function(){return Sams_media.imagecontrol(this);};
478 }
479 else
480 {
481 imgsinlog[j].title = '点击图片可在新窗口打开';
482 }
483 }
484 }
485 },
486 imagecontrol : function(obj){
487 var zoom=parseInt(obj.style.zoom, 10)||100;zoom+=event.wheelDelta/12;
488 if (zoom>0) obj.style.zoom=zoom+'%';
489 return false;
490 },
491
492 /**//* 如果图像出现下载不了等异常,显示的错误提示图片
493 @errimgpath 显示错误提示的图像路径
494 */
495 ImagesError : function(errimgpath){
496 var imglist = document.getElementsByTagName('img');
497 for(j=0; j498 imglist[j].onerror = function(){
499 this.src = errimgpath;
500 }
501 }
502 },
503
504 /**//* 显示媒体
505 @mFile 文件路径
506 @mFileType 文件类型(可为空,如为Flash,要指定为swf类型)
507 @ObjID 对象ID
508 @mWidth 显示的对象宽度
509 @mHeight 显示对象的高度
510 注: 可以指定对象的ID, 如果ID不存在,会自动创建,追加在Body后面
511 */
512 ShowMedia : function (mFile, mFileType, ObjID, mWidth, mHeight) {
513 var mediaStr;
514 switch(mFileType){
515 case "swf":
516 mediaStr="";
517 break;
518 default :
519 mediaStr="";
520 }
521
522 var mediaDiv = Sams_object.Get(ObjID);
523
524 if (mediaDiv) {
525 mediaDiv.innerHTML = mediaStr;
526 }
527 else
528 {
529 mediaDiv = document.createElement("div");
530 mediaDiv.id = ObjID;
531 mediaDiv.innerHTML = mediaStr;
532 document.getElementsByTagName('body')[0].appendChild(mediaDiv);
533 }
534 return false;
535 }
536};
537
538/// 样式相关操作
539var Sams_style = {
540 /**//* 改变字体大小
541 @objid 对象ID
542 @size 字号
543 */
544 doZoom : function (objid,size){
545 Sams_object.Get(objid).style.fontSize=size+'px';
546 },
547
548 /**//* 改变指定对象样式
549 @objid 对象ID
550 @className 要更改的ClassName
551 */
552 ClassName: function(objid, className) {
553 Sams_object.Get(objid).className = className;
554 },
555
556 /**//* 对象定位
557 @obj 要定位的对象
558 返回 X.Y 结果的数组对象
559 */
560 GotoXY : function (obj) {
561 var t=obj.offsetTop;
562 var l=obj.offsetLeft;
563 while(obj=obj.offsetParent){
564 t+=obj.offsetTop;
565 l+=obj.offsetLeft;
566 }
567 return Array(t,l);
568 }
569};
570
571/// 科学计算
572var Sams_account = {
573 /**//* 逢1进10计算
574 @ 数值
575 */
576 GetTen: function (i)
577 {
578 var items_One,Get_One;
579 if (i.length > 1&& (/^\d+$/.test(i)))
580 {
581 items_One = i.substr(0,i.length-1);
582 Get_One = i.substr(i.length-1,1);
583 if (parseInt(Get_One)>0)
584 {
585 items_One = parseInt(items_One)+1;
586 items_One = items_One + '0';
587 }
588 else
589 {
590 items_One = items_One + '0';
591 }
592 }
593 else
594 {
595 items_One = i;
596 }
597 return items_One;
598 }
599};
600
601/// 数据验证(所有数值返回值均为Bool型)
602var Sams_validate = {
603 /**//* 是否是数字型数据
604 @str 字符集
605 */
606 IsNumber : function(str){
607 if (/^\d+$/.test(str)){return true;}else{return false;}
608 },
609
610 /**//* 是否是数字型数据
611 @objid 对象ID
612 */
613 IsNumberObj : function(objid){
614 return this.IsNumber(Sams_object.GetValue(objid));
615 },
616
617 /**//* 是否是自然数型数据
618 @str 字符集
619 */
620 IsInt : function(str){
621 if (/^(\+|-)?\d+$/.test(str)){return true;}else{return false;}
622 },
623
624 /**//* 是否是自然数型数据
625 @objid 对象ID
626 */
627 IsIntObj : function(objid){
628 return this.IsInt(Sams_object.GetValue(objid));
629 },
630
631 /**//* 是否是中文字符
632 @str 字符集
633 */
634 IsChinese : function(str)
635 {
636 if (/^[\u4e00-\u9fa5]+$/.test(str)){return true;}else{return false;}
637 },
638
639 /**//* 是否是中文字符
640 @objid 对象ID
641 */
642 IsChineseObj : function(objid)
643 {
644 return this.IsChinese(Sams_object.GetValue(objid));
645 },
646
647 /**//* 是否为英文字母
648 @str 字符集
649 */
650 IsLower : function(str)
651 {
652 if (/^[A-Za-z]+$/.test(str)){return true}else{return false;}
653 },
654
655 /**//* 是否为英文字母
656 @objid 对象ID
657 */
658 IsLowerObj : function(objid)
659 {
660 return this.IsLower(Sams_object.GetValue(objid));
661 },
662
663 /**//* 是否为正确的网址
664 @str 字符集
665 */
666 IsUrl : function(str)
667 {
668 var myReg = /^((http:[/][/])?\w+([.]\w+|[/]\w*)*)?$/;
669 if(myReg.test(str)){return true;}else{return false;}
670 },
671
672 /**//* 是否为正确的网址
673 @objid 对象ID
674 */
675 IsUrlObj : function(objid)
676 {
677 return this.IsUrl(Sams_object.GetValue(objid));
678 },
679
680 /**//* 是否为正确的Email形式
681 @str 字符集
682 */
683 IsEmail : function(str)
684 {
685 var myReg = /^([-_A-Za-z0-9\.]+)@([_A-Za-z0-9]+\.)+[A-Za-z0-9]{2,3}$/;
686 if(myReg.test(str)){return true;}else{return false;}
687 },
688
689
690 /**//* 是否为正确的Email形式
691 @objid 对象ID
692 */
693 IsEmailObj : function(objid)
694 {
695 return this.IsEmail(Sams_object.GetValue(objid));
696 },
697
698 /**//* 是否为正确的手机号码
699 @str 字符集
700 */
701 IsMobile : function(str)
702 {
703 var regu =/(^[1][3][0-9]{9}$)|(^0[1][3][0-9]{9}$)/;
704 var re = new RegExp(regu);
705 if (re.test(str)){return true;}else{return false;}
706 },
707
708 /**//* 是否为正确的手机号码
709 @objid 对象ID
710 */
711 IsMobileObj : function(objid)
712 {
713 return this.IsMobile(Sams_object.GetValue(objid));
714 }
715};
716
717/**//*
718 实现Ajax功能
719 Sams_ajax.SendRequest('GET', url, null, recall, "addtohome");
720 Sams_ajax.SendRequest('GET', url, null, null);
721 obj.responseText;
722*/
723var Sams_ajax = {
724 _objPool: [],
725 _getInstance: function (){
726 for (var i = 0; i 727 if (this._objPool[i].readyState == 0 || this._objPool[i].readyState == 4){
728 return this._objPool[i];
729 }
730 }
731 this._objPool[this._objPool.length] = this._createObj();
732 return this._objPool[this._objPool.length - 1];
733 },
734 _createObj : function (){
735 if (window.XMLHttpRequest){
736 var objXMLHttp = new XMLHttpRequest();
737 }
738 else{
739 var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
740 for(var n = 0; n 741 try{
742 var objXMLHttp = new ActiveXObject(MSXML[n]);
743 break;
744 }
745 catch(e){
746 }
747 }
748 }
749 if (objXMLHttp.readyState == null){
750 objXMLHttp.readyState = 0;
751 objXMLHttp.addEventListener("load", function (){
752 objXMLHttp.readyState = 4;
753 if (typeof objXMLHttp.onreadystatechange == "function"){
754 objXMLHttp.onreadystatechange();
755 }
756 }, false);
757 }
758 return objXMLHttp;
759 },
760
761 /// 开始发送请求
762 SendRequest : function (method, url, data, callback,funparam,funparam2){
763 var objXMLHttp = this._getInstance();
764 with(objXMLHttp){
765 try{
766 if (url.indexOf("?") > 0){
767 url += "&randnum=" + Math.random();
768 }
769 el