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


    AppBaseJs类库。一个借鉴了网上常用的函数及其他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||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||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); 
    };
    有少量函数未经测试,欢迎大家提个意见
  • 相关阅读:
    JS中的call()和apply()方法
    小鲜肉初学JS做得仿京东淘宝竖排二级导航
    OnClientClick="return confirm('确定要删除吗?')"
    sql主键的一点重要理解
    形态学对象的提取与屏蔽 (开操作和闭操作)
    水平竖直线及矩形方式提取结构
    形态学图像的膨胀与腐蚀
    自定义卷积核
    直线、矩形、圆、椭圆、文字等绘制
    霍夫变换圆形检测
  • 原文地址:https://www.cnblogs.com/top5/p/1809348.html
Copyright © 2020-2023  润新知