AppBaseJs 类库 网上常用的javascript函数及其他js类库写的

复制代码 代码如下:

  /*-----------------------------------

  Web Application JavaScript Library

  2009.11 janchie

  ------------------------------------*/

  //String原生对象扩展 置空左右端空格

  String.prototype.trim = function(){

  return this.replace(/(^[\s\n\t\r]*)|([\s\n\r\t]*$)/g, "");

  };

  //Date原生对象扩展 格式化输出

  Date.prototype.format = function (string) {

  var self = this;

  var p = function p(s) {

  return (s.toString().length == 1) ? "0" + s : s;

  };

  return string ? string.replace(/dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?/g,

  function (string) {

  switch (string) {

  case "hh": return p(self.getHours() < 13 ? self.getHours() : (self.getHours() - 12));

  case "h": return self.getHours() < 13 ? self.getHours() : (self.getHours() - 12);

  case "HH": return p(self.getHours());

  case "H": return self.getHours();

  case "mm": return p(self.getMinutes());

  case "m": return self.getMinutes();

  case "ss": return p(self.getSeconds());

  case "s": return self.getSeconds();

  case "yyyy": return self.getFullYear();

  case "yy": return self.getFullYear().toString().substring(2, 4);

  case "dddd": return self.getDayName();

  case "ddd": return self.getDayName(true);

  case "dd": return p(self.getDate());

  case "d": return self.getDate().toString();

  case "MMMM": return self.getMonthName();

  case "MMM": return self.getMonthName(true);

  case "MM": return p((self.getMonth() + 1));

  case "M": return self.getMonth() + 1;

  case "t": return self.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);

  case "tt": return self.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;

  case "zzz":

  case "zz":

  case "z": return "";

  }

  }) : this.toString();

  };

  /*------------------------------------*/

  //声明对象

  var App = {};

  //对象继承或属性合并

  App.extend = function(obj, hash) {

  this.each(hash, function(key, value) {

  obj[key] = value;

  });

  return obj;

  };

  //遍历

  App.each = function(obj, func, context) {

  var length = obj.length, i = -1;

  if(length !== undefined) {

  while(++i < length) if(func.call(context, obj[i], i, obj, length) === false) break;

  }

  else for(var key in obj) if(obj.hasOwnProperty(key)) if(func.call(context, key, obj[key], obj) === false) break;

  return obj;

  };

  (function(doc, win){

  var string = Object.prototype.toString,

  quirks = doc.compatMode === "BackCompat",

  docelem = doc.documentElement,

  ua = win.navigator.userAgent.toLowerCase(),

  version = (ua.match( /.(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],

  isChrome = /chrome/.test(ua),

  isWebKit = /webkit/.test(ua),

  isSafari = !isChrome && isWebKit,

  isOpera = /opera/.test(ua),

  isIE = /msie/.test( ua ) && !isOpera,

  isFF = /firefox/.test(ua);

  //Dom加载

  doc.ready = function(func) {

  var isReady = false,doReady = function() {

  if (isReady) return;

  isReady = true; func();

  };

  if (isIE) {

  if (docelem.doScroll && win.self == win.top) {

  (function() {

  if (isReady) return;

  try {

  docelem.doScroll("left");

  } catch (error) {

  setTimeout(arguments.callee, 0);

  return;

  }

  doReady();

  })();

  }else {

  if (isReady) return;

  this.attachEvent("onreadystatechange", function() {

  if (doc.readyState === "complete") {

  doc.detachEvent("onreadystatechange", arguments.callee);

  doReady();

  }

  });

  }

  win.attachEvent('onload', doReady);

  }else if (isWebKit && version < 525) {

  (function() {

  if (isReady) return;

  if (/loaded|complete/.test(doc.readyState))

  doReady();

  else

  setTimeout(arguments.callee, 0);

  })();

  win.addEventListener('load', doReady, false);

  }else {

  if (!isFF)

  this.addEventListener("DOMContentLoaded", function() {

  doc.removeEventListener("DOMContentLoaded", arguments.callee, false);

  doReady();

  }, false);

  this.addEventListener('load', doReady, false);

  }

  };

  App.extend(App,{

  //类型检测

  isArray: function(v) { //是否为数组

  return string.apply(v) === "[object Array]";

  },

  isFunction: function(v) { //是否为函数体

  return string.apply(v) === "[object Function]";

  },

  isNumber: function(v) { //是否为数字

  return typeof v === "number" && isFinite(v);

  },

  isDate: function(v) { //是否为日期

  return string.apply(v) === "[object Date]";

  },

  isElement: function(v) { //是否为Dom元素节点

  return !!(v && v.nodeType === 1);

  },

  // 浏览器检测

  isOpera: isOpera,

  isChrome: isChrome,

  isWebKit: isWebKit,

  isSafari: isSafari,

  isIE: isIE,

  isFF: isFF,

  isQuirks:quirks,

  getVersion:version,

  //取id元素

  $: function(id) {

  return typeof id === "string" ? doc.getElementById(id) : id;

  },

  //取name元素集合

  $N:function(name){

  return doc.getElementsByName(name);

  },

  //取tag元素集合

  $T:function(tag, root){

  return (root || doc).getElementsByTagName(tag);

  },

  //按属性名(是否包含)、值、范围取元素集合

  $A:function(attrName, attrValue, tag, root){

  var elems = doc.all ? doc.all : this.$T( tag || "*",root || doc), result = [],

  attVal = (typeof attrValue != "undefined")? new RegExp("(^|\\s)" + attrValue + "(\\s|$)") : null;

  for(var i=0; i<elems.length; i++){

  attr = elems[i][attrName] || elems[i].getAttribute(attrName);

  if(typeof attr === "string" && attr.length > 0){

  if(typeof attrValue === "undefined" || (attVal && attVal.test(attr))){

  result.push(elems[i]);

  }

  }

  }

  return result;

  },

  //取body元素

  $B: doc.body || docelem,

  //取Class属性元素集合

  $C:function(attrValue, tag, root){

  return this.$A("className",attrValue, tag, root);

  },

  //取浏览器窗体宽度

  getWinWidth: win.innerWidth || docelem.clientWidth || doc.body.clientWidth,

  //取浏览器窗体高度

  getWinHeight: win.innerHeight || docelem.clientHeight || doc.body.clientHeight,

  //取元素样式

  getStyle: function(elem,name){

  if(elem.style[name]){

  return elem.style[name];

  }else if(elem.currentStyle){

  return elem.currentStyle[name];

  }else if(doc.defaultView && doc.defaultView.getComputedStyle){

  name = name.replace(/([A-Z])/g,"-$1");

  name = name.toLowerCase();

  var s = doc.defaultView.getComputedStyle(elem,"");

  return s && s.getPropertyValue(name);

  }else{

  return null;

  }

  },

  //获取元素屏幕坐标值

  getPosition: function() {

  return docelem.getBoundingClientRect && function(o){

  var pos = o.getBoundingClientRect(), root = o.ownerDocument || o.doc;

  return {left:pos.left+root.documentElement.scrollLeft,top:pos.top+root.documentElement.scrollTop};

  } || function(o){

  var x = 0, y = 0;

  do{x += o.offsetLeft;y += o.offsetTop;}while((o=o.offsetParent));

  return {left:x,top:y};

  };

  }(),

  //设置透明度

  setOpacity: function (elem,num){

  if(elem.filters){

  elem.style.filter = "alpha(opacity="+num+")";

  }else{

  elem.style.opacity = num/100;

  }

  },

  //隐藏或显示元素

  hide: function(elem){elem.style.display = "none";},

  show: function(elem){elem.style.display = "block";},

  toggle: function(elem){

  elem.style.display = this.getStyle(elem,"display") === "none" ?"block":"none";

  },

  //元素Class属性操作

  addClass: function(elem, clsName) {

  if (elem.className === '') {

  elem.className = clsName;

  }else if (elem.className !== '' && (' ' + elem.className + ' ').indexOf(' ' + clsName + ' ') === -1) {

  elem.className = elem.className + ' ' + clsName;

  }

  },

  removeClass: function(elem, clsName) {

  if (clsName && (' ' + elem.className + ' ').indexOf(' ' + clsName + ' ') > -1) {

  elem.className = (' ' + elem.className + ' ').replace(' ' + clsName + ' ', ' ').replace(/^ | $/g,'');

  }

  },

  //追加Html文本对象( 支持Table )

  append: function(elem, text) {

  if (typeof text === "string") {

  if (elem.insertAdjacentHTML){

  if (elem.tagName === "TABLE"){

  var html = elem.outerHTML,ep = elem.parentNode,sl = html.length;

  text = html.substr(0,sl-8) + text + html.substr(sl-8,sl);

  ep.insertAdjacentHTML("beforeEnd", text);

  ep.replaceChild(ep.lastChild,elem);

  }else{

  elem.insertAdjacentHTML("beforeEnd", text);

  }

  }else {

  var rlt = null, rg = doc.createRange(), fm = rg.createContextualFragment(text);

  rlt ? elem.insertBefore(fm, rlt) : elem.appendChild(fm);

  }

  }else if (typeof text === "object") elem.appendChild(text);

  },

  //删除元素

  remove:function(elem){

  if (elem.parentNode) elem.parentNode.removeChild(elem);

  },

  //置空元素内容及子节点

  empty:function(elem){

  while(elem.firstChild){

  elem.removeChild(elem.firstChild);

  }

  },

  //图像预加载

  loadimages: function(){

  var a = arguments,loads = function(){

  if(doc.images){ if(!doc.ps) doc.ps = [];

  var i,j=doc.ps.length; for(i=0; i<a.length; i++)

  if (a[i].indexOf("#")!=0){ doc.ps[j] = new Image; doc.ps[j++].src=a[i];}}

  };

  arguments.callee.caller ? loads():doc.ready(loads);

  },

  //事件绑定

  bind: function () {

  if (win.addEventListener) {

  return function(elem, sType, fnc) {

  elem.addEventListener(sType, fnc, false);

  };

  } else if (win.attachEvent) {

  return function(elem, sType, fnc) {

  elem.attachEvent("on" + sType, fnc);

  };

  } else {

  return function(){};

  }

  }(),

  //解除事件绑定

  unbind: function(elem, sType, fnc){

  if(elem.removeEventListener){

  elem.removeEventListener(sType, fnc, false);

  }else if(elem.detachEvent){

  elem.detachEvent("on" + sType, fnc);

  }else{

  elem["on"+ sType] = null;

  }

  },

  //禁止事件冒泡

  stopPropagation: function(ev) {

  if (ev.stopPropagation) {

  ev.stopPropagation();

  } else {

  ev.cancelBubble = true;

  }

  },

  //禁止默认事件动作

  preventDefault: function(ev) {

  if (ev.preventDefault) {

  ev.preventDefault();

  } else {

  ev.returnValue = false;

  }

  },

  //获取鼠标位置

  getXY: function(ev){

  return {

  x:ev.pageX ? ev.pageX : ev.clientX + docelem.scrollLeft,

  y:ev.pageY ? ev.pageY : ev.clientY + docelem.scrollTop

  };

  },

  //绑定拖动事件

  drag: function (obj, obj2){//obj:移动的对象 obj2:拖动点

  obj2 = obj2 || obj; //如果不设拖动点,那么拖动点即移动的对象

  var x, y, ut = this;

  obj2.onmousedown = function(e){

  e = e || win.event;

  ut.preventDefault(e);

  obj.setCapture && obj.setCapture();

  x = ut.getXY(e).x - parseInt(obj.style.left);

  y = ut.getXY(e).y - parseInt(obj.style.top);

  docelem.onmousemove = over;

  docelem.onmouseup = up;

  }

  function over(e){

  e = e || win.event;

  obj.style.left = ut.getXY(e).x - x + "px";

  obj.style.top = ut.getXY(e).y - y + "px";

  }

  function up(){

  obj.releaseCapture && obj.releaseCapture();

  docelem.onmousemove = null;

  docelem.onmouseup = null;

  }

  },

  //绑定横向滚动事件

  sliderX : function (obj,x1,x2,overEvent,upEvent){

  var x, t , ut = this;

  obj.onmousedown = function (e){

  e = e || win.event;

  ut.preventDefault(e);

  obj.setCapture && obj.setCapture();

  t = ut.getXY(e).x - parseInt(obj.style.left);

  docelem.onmousemove = over;

  docelem.onmouseup = up;

  }

  function over(e){

  e = e || win.event;

  x = ut.getXY(e).x - t;

  if(x<x1) x=x1;

  if(x>x2) x=x2;

  obj.style.left = x + "px";

  overEvent && overEvent(x);

  }

  function up(){

  obj.releaseCapture && obj.releaseCapture();

  docelem.onmousemove = null;

  docelem.onmouseup = null;

  upEvent && upEvent(x);

  }

  },

  //绑定竖向滚动事件

  sliderY : function (obj,y1,y2,overEvent,upEvent){

  var y, t , ut = this;

  obj.onmousedown = function (e){

  e = e || win.event;

  ut.preventDefault(e);

  obj.setCapture && obj.setCapture();

  t = ut.getXY(e).y - parseInt(obj.style.top);

  docelem.onmousemove = over;

  docelem.onmouseup = up;

  }

  function over(e){

  e = e || win.event;

  y = ut.getXY(e).y - t;

  if(y<y1) y=y1;

  if(y>y2) y=y2;

  obj.style.top = y + "px";

  overEvent && overEvent(y);

  }

  function up(){

  obj.releaseCapture && obj.releaseCapture();

  docelem.onmousemove = null;

  docelem.onmouseup = null;

  upEvent && upEvent(y);

  }

  },

  //设置cookie

  setCookie:function(n, v, t){

  var exp = new Date();

  exp.setTime(exp.getTime() + (t||24)*60*60*1000);

  doc.cookie = n + "="+ escape(v) + ";expires=" + exp.toGMTString()+';path=/';

  },

  //获取cookie

  getCookie:function(n){

  var arr = doc.cookie.match(new RegExp("(^| )"+ n +"=([^;]*)(;|$)"));

  if(arr != null) return unescape(arr[2]);

  return null;

  }

  });

  })(document,window);

  //日期字符串格转日期

  App.parseDate = function(date){

  var dt = date instanceof Date ? date: Date(date.replace("-","/"));

  return isNaN(dt.getTime()) ? null : dt ;

  };

  //Json字符串转对象

  App.parseJSON = function(jsonString) {

  var result = false;

  try {

  result = eval('(' + jsonString + ')');

  }catch (e) {};

  return result;

  };

  //取不重复唯一值

  App.getUid = function(){

  return "uid"+(new Date()).getTime()+ parseInt(Math.random()*100000);

  };

  //获取指定范围的随机数

  App.random = function (n1, n2){

  return Math.floor(Math.random()*(n2-n1+1)) + n1;

  };

  //秒转换为毫秒

  App.s2ms = function (str){

  var t = str.split(":");

  return t[0] * 60000 + t[1] * 1000;

  };

  //毫秒转换为秒

  App.ms2s = function (ms){

  return (ms/60000+":"+ms/1000%60).replace(/\.\d+/g,"").replace(/(^|:)(\d)(?!\d)/g,"$10$2");

  };

  //数字转换为编号

  App.num2number = function (num, n){

  return Array(n).join("0").concat(num).slice(-n);

  };

  //数字转化为中文

  App.num2gb = function (n){

  return "零一二三四五六七八九".split("")[n];

  };

  //Flash生成代码

  App.getFlash = function (url, width, height, param){

  var tagName = "", o1 = {width:width||1, height:height||1}, o2 = {};

  if (this.isIE){

  tagName = "object ";

  o1.classid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";

  o1.codebase = "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0";

  o2.movie = url;

  o2.quality = "high";

  param && this.extend(o2, param);

  }else{

  tagName = "embed ";

  o1.type = "application/x-shockwave-flash";

  o1.pluginspage = "http://www.adobe.com/go/getflashplayer_cn";

  o1.src = url;

  o1.quality = "high";

  param && this.extend(o1, param);

  }

  if(o1.width<2&&o1.height<2) tagName+='style="position:absolute; top:-100px;" ';

  var a1=[], a2=[], i;

  for(i in o1) a1.push(i+'="'+o1[i]+'"');

  for(i in o2) a2.push('<param name="'+i+'" value="'+o2[i]+'" />');

  return '<'+tagName+a1.join(' ')+'>'+a2.join('')+'</'+tagName+'>';

  };

  //播放器生成代码

  App.getPlayer = function (url, width, height, param){

  var wmp = ["6bf52a52-394a-11d3-b153-00c04f79faa6","application/x-mplayer2"];

  var rmp = ["CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA","audio/x-pn-realaudio-plugin"];

  var mp = /\.rm$/.test(url) ? rmp : wmp;

  var tagName = "", o1 = {width:width||1, height:height||1}, o2 = {};

  if (this.isIE){

  tagName = "object ";

  o1.classid = "clsid:"+mp[0];

  o2.url = url;

  param && this.extend(o2, param);

  }else{

  tagName = "embed ";

  o1.type = mp[1];

  o1.src = url;

  param && this.extend(o1, param);

  }

  if(o1.width<2&&o1.height<2) tagName+='style="position:absolute; top:-100px;" ';

  var a1=[], a2=[], i;

  for(i in o1) a1.push(i+'="'+o1[i]+'"');

  for(i in o2) a2.push('<param name="'+i+'" value="'+o2[i]+'" />');

  return '<'+tagName+a1.join(' ')+'>'+a2.join('')+'</'+tagName+'>';

  };

  //获取XMLHttp对象

  App.xmlhttp = function (){

  if (this.isFF) return new XMLHttpRequest();

  var a = ["Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0","Msxml2.XMLHTTP.5.0"];

  for (var i=0,l=a.length;i<l;i++){

  try{

  return new ActiveXObject(a[i]);

  }catch(e){}

  }

  return false;

  };

  //Get数据

  App.get = function (url,callBack){

  var x = this.xmlhttp();

  x.open("get",url,true);

  x.onreadystatechange = function(){

  x.readyState==4 && (x.status==0||x.status==200) && callBack(x.responseText);

  }

  x.send(null);

  };

  //Post数据

  App.post = function (url,arg,callBack){

  var x = this.xmlhttp();

  x.open("post",url,true);

  x.setRequestHeader("Content-Length",arg.length);

  x.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

  x.onreadystatechange = function(){

  x.readyState==4 && (x.status==0||x.status==200) && callBack(x.responseText);

  }

  x.send(arg);

  };

  有少量函数未经测试,欢迎大家提个意见