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


Posted in Javascript onMarch 04, 2010
/*----------------------------------- 
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); 
};

有少量函数未经测试,欢迎大家提个意见
Javascript 相关文章推荐
js加解密 脚本解密
Feb 22 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
Aug 12 Javascript
JavaScript继承方式实例
Oct 29 Javascript
jQuery实现下拉框左右选择的简单实例
Feb 22 Javascript
使用script的src实现跨域和类似ajax效果
Nov 10 Javascript
CSS3,HTML5和jQuery搜索框集锦
Dec 02 Javascript
JavaScript编程中布尔对象的基本使用
Oct 25 Javascript
快速学习AngularJs HTTP响应拦截器
Dec 31 Javascript
阿里云ecs服务器中安装部署node.js的步骤
Oct 08 Javascript
AngularJS自定义指令详解(有分页插件代码)
Jun 12 Javascript
详解webpack引入第三方库的方式以及注意事项
Jan 15 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
Jul 19 Javascript
JavaScript类和继承 constructor属性
Mar 04 #Javascript
爆炸式的JS圆形浮动菜单特效代码
Mar 03 #Javascript
js 编写规范
Mar 03 #Javascript
jquery validation插件表单验证的一个例子
Mar 03 #Javascript
Jquery 实现Tab效果 思路是js思路
Mar 02 #Javascript
JavaScript页面刷新与弹出窗口问题的解决方法
Mar 02 #Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
Mar 02 #Javascript
You might like
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
jQuery 创建Dom元素
2010/05/07 Javascript
JS 树形递归实例代码
2010/05/18 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
JavaScript仿京东秒杀倒计时
2020/03/17 Javascript
Python中的引用和拷贝浅析
2014/11/22 Python
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
python操作字典类型的常用方法(推荐)
2016/05/16 Python
Python实现TCP/IP协议下的端口转发及重定向示例
2016/06/14 Python
使用PyCharm创建Django项目及基本配置详解
2018/10/24 Python
Python实现DDos攻击实例详解
2019/02/02 Python
简单了解python数组的基本操作
2019/11/26 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
Sixt美国租车:高端豪华车型自驾体验
2017/09/02 全球购物
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
测试工程师岗位职责
2013/11/28 职场文书
先进班级集体事迹材料
2014/01/30 职场文书
优秀教师获奖感言
2014/01/31 职场文书
小学生元旦感言
2014/02/26 职场文书
成绩单家长评语大全
2014/04/16 职场文书
全国文明单位申报材料
2014/05/31 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
机关单位2016年创先争优活动总结
2016/04/05 职场文书
PHP判断是否是json字符串
2021/04/01 PHP
Django+Celery实现定时任务的示例
2021/06/23 Python
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python