|
js 代码集 学习js的朋友可以看下,功能比较多,大家可以自己选择。
/** * @author Super Sha * QQ:770104121 * E-Mail:supei_shafeng@163.com * publish date: 2009-3-27 * All Rights Reserved */
var JsHelper={}; //声明一个JsHelper根命名空间 JsHelper.DOM = {}; //声明JsHelper目录下的DOM命名空间 JsHelper.Event={}; //声明JsHelper目录下的Event事件命名空间 JsHelper.Browser={}; //声明JsHelper目录下的跟浏览器相关的函数Browser命名空间 JsHelper.Ajax={}; //声明Jshelper目录下的跟Ajax相关的函数命名空间 JsHelper.String={}; //声明JsHelper目录下的跟String相关的命名空间
/* * $() 可以输入多个参数,将返回一个获取对象的数组 */ var $=function(){ //简化版的$方法 var elements=new Array(); if(arguments.length==0){ //如果参数为空,则返回document元素 return document; } for (var i = 0; i < arguments.length; i++) { var element = arguments[i]; if (typeof element == string ) { element = document.getElementById(element); } if (arguments.length == 1) { return element; } elements.push(element); } return elements; } JsHelper.DOM.$=function() { var elements=new Array(); for (var i = 0; i < arguments.length; i++) { var element = arguments[i]; if (typeof element == string ) { element = document.getElementById(element); } if (arguments.length == 1) { return element; } elements.push(element); } return elements; } /* * $Value() 可以输入多个参数,将返回一个获取对象的Value数组 */ JsHelper.DOM.value=function() { var values=new Array(); for (var i = 0; i < arguments.length; i++) { var element = arguments[i]; if (typeof(element) == string ) { var v=document.getElementById(element).value; } if(arguments.length==1) { return v; } values.push(v); } return values; } /* makeArray对输入的参数生成数组返回,如果参数为空,则返回 "undefined",否则返回数组 */ JsHelper.String.makeArray=function() { var values=new Array(); if(arguments.length>0){ for (var i = 0; i < arguments.length; i++) { var element=arguments[i]; if(typeof element == "string") { values.push(element); } } } else { return "undefined"; } return values; } /* * 声明一个StringBuilder类,处理连接字符串性能的问题 */ JsHelper.String.StringBulider={ _strs:new Array(), append: function(str){ //给属性_strs添加字符串 this._strs.push(str); return this; }, toString:function(){ if (arguments.length != 0) { return this._strs.join(arguments[0]); //返回属性_strs结合后的字符串,接受一个可选的参数用于join的参数 }else{ return this._strs.join(""); } } };
/* * $TagName()输入一个参数,将返回一个获取Elements TagNeme对象的数组 */ JsHelper.DOM.tagName=function() { var element=arguments[0]; if(typeof element== string ) { var tagname=document.getElementsByTagName(element); } return tagname; }
//============================================================ /* * label:HTML Label ID * 只能适用与responseText * 只能适用与GET方式 */ var _xmlhttp;//声明全局XMLHttpRequest对象实例 function Ajax(method, url, label){ this.method = method; this.url = url; try { _xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { _xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (s) { _xmlhttp = new XMLHttpRequest(); } } Ajax.prototype.ResponseText = function(){ _xmlhttp.onreadystatechange = this.onComplete; _xmlhttp.open(this.method, this.url, true) _xmlhttp.send(null); } Ajax.prototype.onComplete = function(){ if (_xmlhttp.readyState == 4) { if (_xmlhttp.status == 200) { $(label).innerHTML = _xmlhttp.responseText; } } } this.ResponseText(); } //================================================
/* * 判断浏览器类型 */ var ua = navigator.userAgent.toLowerCase(); if (window.ActiveXObject) { JsHelper.Browser.IE = ua.match(/msie ([\d.]+)/)[1]; } else if (document.getBoxObjectFor) { JsHelper.Browser.Firefox = ua.match(/firefox\/([\d.]+)/)[1]; } else if (window.MessageEvent && !document.getBoxObjectFor) { JsHelper.Browser.Chrome = ua.match(/chrome\/([\d.]+)/)[1]; } else if (window.opera) { JsHelper.Browser.Opera = ua.match(/opera.([\d.]+)/)[1]; } else if (window.openDatabase) { JsHelper.Browser.Safari = ua.match(/version\/([\d.]+)/)[1]; } /* * 声明一个XMLHttpRequest对象的实例,返回实例 */ JsHelper.Ajax.createRequest=function() { var xmlhttp=null; try { xmlhttp=new XMLHttpRequest(); } catch(trymicrosoft){ try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(othermicrosoft){ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlhttp; }
/* * 一个通用的AddEventListener函数,obj为DOM元素 */ JsHelper.Event.addEventlistener=function(labelID,eventMode,fn) { var obj=JsHelper.DOM.$(labelID); if (typeof window.addEventListener != undefined ) { obj.addEventListener(eventMode, fn, false); } else if (typeof document.addEventListener != undefined ) { obj.addEventListener(eventMode, fn, false); } else if (typeof window.attachEvent != undefined ) { obj.attachEvent("on"+eventMode, fn); } else { return false; } return true; }
/* *包含了一个Douglas Crockford对函数的method的扩展,下面的三个函数版权归Douglas Crockford所有,特此声明 */ Function.prototype.method = function (name, func) { this.prototype[name] = func; return this; }; Function.method( inherits , function (parent) { var d = {}, p = (this.prototype = new parent()); this.method( base , function uber(name) { if (!(name in d)) { d[name] = 0; } var f, r, t = d[name], v = parent.prototype; if (t) { while (t) { v = v.constructor.prototype; t -= 1; } f = v[name]; } else { f = p[name]; if (f == this[name]) { f = v[name]; } } d[name] += 1; r = f.apply(this, Array.prototype.slice.apply(arguments, [1])); d[name] -= 1; return r; }); return this; }); Function.method( swiss , function (parent) { for (var i = 1; i < arguments.length; i += 1) { var name = arguments[i]; this.prototype[name] = parent.prototype[name]; } return this; });
/* * 解决IE不支持HTMLElement的一个解决方案 */ var DOMElement ={ extend: function(name,fn) { if(!document.all) { eval("HTMLElement.prototype." + name + " = fn"); } else { var _createElement = document.createElement; document.createElement = function(tag) { var _elem = _createElement(tag); eval("_elem." + name + " = fn"); return _elem; } var _getElementById = document.getElementById; document.getElementById = function(id) { var _elem = _getElementById(id); eval("_elem." + name + " = fn"); return _elem; } var _getElementsByTagName = document.getElementsByTagName; document.getElementsByTagName = function(tag) { var _arr = _getElementsByTagName(tag); for(var _elem=0;_elem<_arr.length;_elem++) eval("_arr[_elem]." + name + " = fn"); return _arr; } } } }; /* * 下面仿照jQuery之父John Resig的几个查询DOM的函数,连缀的能力 */ DOMElement.extend("previous",function(){ // similar to previousSibling DOM Function var elem=this; do{ elem=elem.previousSibling; }while(elem&&elem.nodeType!=1); return elem; });
DOMElement.extend("next",function(){ //similar to nextSibling DOm Function var elem=this; do{ elem=elem.nextSibling; }while(elem&&elem.nodeType!=1); return elem; }); DOMElement.extend("first",function(num){ //similar to firstChild DOM Function,同parent var elem=this; num=num||1; for (var i = 0; i < num; i++) { elem = elem.firstChild; } return (elem && elem.nodeType!=1 ? next(elem):elem); }); DOMElement.extend("last",function(num){ //similar to lastChild DOM Function,同parent var elem=this; num=num||1; for (var i = 0; i < num; i++) { elem = elem.lastChild; } return (elem && elem.nodeType!=1 ? prev(elem):elem); }); DOMElement.extend("parent",function(num){ //可以返回几个num等级的parentNode,比如:parent(2)就等同于elem.parent().parent(); var elem=this; num=num ||1; for (var i = 0; i < num; i++) { if (elem != null) { elem = elem.parentNode; } } return elem; }); DOMElement.extend("hasChilds",function(){ //判断时候有子节点 if(this!=null && this.hasChildNodes()){ return true; } else{ return false; } });
DOMElement.extend("text",function(){ //得到标签内的文本,如果参数不为零,则可以设置标签内的文版,对input标签也同样适合 try{ //解决Firefox不支持InnerText的解决方案 HTMLElement.prototype.__defineGetter__("innerText",function(){ var anyString = ""; var childS = this.childNodes; for(var i=0; i<childS.length; i++){ if (childS[i].nodeType == 1) { anyString += childS[i].tagName == "BR" ? "n : childS[i].innerText; } else if(childS[i].nodeType == 3) { anyString += childS[i].nodeValue; } } return anyString; }); } catch(e){} if (arguments.length == 1) { if (this.innerText) { this.innerText = arguments[0]; } else { this.value = arguments[0]; } } else { return this.innerText || this.value; } }); DOMElement.extend("html",function(){ //得到元素的innerHTML,如果参数不为零,则可以设置元素内的文本和子节点 if(arguments.length==0){ return this.innerHTML; } else if(arguments.length==1) { this.innerHTML=arguments[0]; } });
/* * 下面是className的操作 */ DOMElement.extend("getClassName",function(){ //返回元素className if(this!=null&&this.nodeType==1){ return this.className.replace(/\s+/, ).split( ); } return null; }); DOMElement.extend("hasClassName",function(){ //判断是否有class类 if(this!=null&&this.nodeType==1){ var classes=this.getClassName(); for(var i=0;i<classes.length;i++){ if(arguments[0]==classes[i]) return true; } }else{ return false; } });
DOMElement.extend("addClass",function(){ //给元素添加类,可以一次性添加多个类 if(this!=null&&this.nodeType==1){ for (var i = 0; i < arguments.length; i++) { this.className += (this.className ? : ) + arguments[i]; } return this; } return null; }); DOMElement.extend("removeClass",function(){ //删除类,如果没有参数,则删除全部的类 if (this != null && this.nodeType == 1) { if (arguments.length == 0) { this.className = ""; } else if(arguments.length!=0) { var classes=this.getClassName(); for (var i = 0; i < arguments.length; i++) { for (var j = 0; j < classes.length; j++) { if (arguments[i]==classes[j]) { classes = classes.join(" ").replace(arguments[i], ).split(" "); } } } this.className=classes.join(" "); } return this; } return null; }); JsHelper.__toggleflag=false; //增加一个判断开关 DOMElement.extend("toggleClass",function(classname){ //两次点击调用的函数不同 if(this!=null && this.nodeType==1){ this.onclick=function(){ if(JsHelper.__toggleflag==false){ this.addClass(classname); JsHelper.__toggleflag = true; }else if (JsHelper.__toggleflag == true) { this.removeClass(classname); JsHelper.__toggleflag = false; } } } }); /* * 给每个对象添加click方法,类似与jQuery的click方法的使用方式 */ DOMElement.extend("click",function(){ if(this!=null && this.nodeType==1){ if(arguments.length==0){ alert("you have done nothing when you clicked."); }else{ this.onclick=arguments[0]; } } });
/* * 给每个对象扩展hover方法,此方法接受两个函数作为参数 */ DOMElement.extend("hover",function(){ if(this!=null && this.nodeType==1){ if(arguments.length!=2){ alert("Require two function to be param."); }else{ this.onmouseover=arguments[0]; this.onmouseout=arguments[1]; } } }); /* * 给每个元素添加事件的函数 */ DOMElement.extend("addEvent",function(eventtype,fn){ if(document.all){ this.attachEvent("on"+eventtype,fn); }else{ this.addEventListener(eventtype,fn,false); } }); /* * 给每个元素扩展css方法,接受一个属性和属性值作为参数 */ DOMElement.extend("css",function(){ if(this!=null && this.nodeType==1){ if(arguments.length!=2){ alert("Require two function to be param."); }else{ this.style[arguments[0]]=arguments[1]; //设置相关的style属性的值 return this; } } return null; }); /* * //查找并返回存在某个类的全部的元素,name为className,type为HTML标签类型 */ var hasClass = function(name,type){ var r = new Array(); //var re = new RegExp(name,"g"); var e=document.getElementsByTagName(type||"*"); for(var i=0;i<e.length;i++){ var classes=e[i].getClassName(); for (var j = 0; j < classes.length; j++) { if (name== classes[j]) { r.push(e[i]); } } } return r; } /* * 返回某个元素的特定的子元素引用的集合,如果没有元素调用该方法,则默认是document */ DOMElement.extend("find",function(){ var elem=this||document; var r=new Array(); if(elem!=null && (elem.nodeType==1||elem.nodeType==9)){ var e=elem.getElementsByTagName(arguments[0]); for(var i=0;i<e.length;i++){ r.push(e[i]); } return r; } return null; }); |
|