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 CSS修改学习第三章 修改样式表
Feb 19 Javascript
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
Mar 09 Javascript
jquery异步请求实例代码
Jun 21 Javascript
js出生日期 年月日级联菜单示例代码
Jan 10 Javascript
JavaScript获取flash对象与网上的有所不同
Apr 21 Javascript
JavaScript实现的简单烟花特效代码
Oct 20 Javascript
Jquery 效果使用详解
Nov 23 Javascript
JS实现的DIV块来回滚动效果示例
Feb 07 Javascript
详解ES6之用let声明变量以及let loop机制
Jul 15 Javascript
vue中element-ui表格缩略图悬浮放大功能的实例代码
Jun 26 Javascript
一文看懂如何简单实现节流函数和防抖函数
Sep 05 Javascript
微信小程序 bindtap 传参的实例代码
Feb 21 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+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
thinkphp查询,3.X 5.0方法(亲试可行)
2017/06/17 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
php实现文件上传基本验证
2020/03/04 PHP
js自带函数备忘 数组
2006/12/29 Javascript
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
javascript根据像素点取位置示例
2014/01/27 Javascript
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
2014/08/18 Javascript
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
浅谈angularjs中响应回车事件
2017/04/24 Javascript
关于JS与jQuery中的文档加载问题
2017/08/22 jQuery
vue实现匀速轮播效果
2020/06/29 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
python实现下载整个ftp目录的方法
2017/01/17 Python
Python中字典和集合学习小结
2017/07/07 Python
Scrapy的简单使用教程
2017/10/24 Python
全面分析Python的优点和缺点
2018/02/07 Python
基于Django与ajax之间的json传输方法
2018/05/29 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
Pyspark读取parquet数据过程解析
2020/03/27 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
python cookie反爬处理的实现
2020/11/01 Python
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
YOINS官网:时尚女装网上购物
2017/03/17 全球购物
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
全球性的女装店:storets
2019/06/12 全球购物
大学生职业生涯规划书范文
2014/01/04 职场文书
幼儿学前班评语
2014/12/29 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript