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 相关文章推荐
JavaScript 编程引入命名空间的方法
Jun 29 Javascript
数组方法解决JS字符串连接性能问题有争议
Jan 12 Javascript
jquerymobile checkbox及时刷新才能获取其准确值
Apr 14 Javascript
利用JS延迟加载百度分享代码,提高网页速度
Jul 01 Javascript
聊一聊JS中的prototype
Sep 29 Javascript
vue使用自定义icon图标的方法
May 14 Javascript
element-ui 关于获取select 的label值方法
Aug 24 Javascript
Vue 动态组件与 v-once 指令的实现
Feb 12 Javascript
koa+mongoose实现简单增删改查接口的示例代码
May 13 Javascript
bootstrap datepicker的基本使用教程
Jul 09 Javascript
Vue之Mixins(混入)的使用方法
Sep 24 Javascript
JS正则表达式验证密码强度
Mar 18 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
php使用NumberFormatter格式化货币的方法
2015/03/21 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
详解php伪造Referer请求反盗链资源
2019/01/24 PHP
javascript写的一个链表实现代码
2009/10/25 Javascript
javascript 简单抽屉效果的实现代码
2010/03/09 Javascript
什么是DOM(Document Object Model)文档对象模型
2012/03/05 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
JavaScrip常见的一些算法总结
2015/12/28 Javascript
jQuery获取字符串中出现最多的数
2016/02/22 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
小程序日历控件使用方法详解
2018/12/29 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
pycharm 使用心得(三)Hello world!
2014/06/05 Python
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
python xml解析实例详解
2016/11/14 Python
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
python利用7z批量解压rar的实现
2019/08/07 Python
python3 enum模块的应用实例详解
2019/08/12 Python
Python异步编程之协程任务的调度操作实例分析
2020/02/01 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
2020/11/30 HTML / CSS
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
澳大利亚在线高跟鞋商店:Shoe Me
2019/11/19 全球购物
产品工艺师的岗位职责
2013/11/15 职场文书
网络工程师职业规划
2014/02/10 职场文书
2014司机年终工作总结
2014/12/05 职场文书
医学生自荐信范文
2015/03/05 职场文书
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏
Python first-order-model实现让照片动起来
2022/06/25 Python