//js自定义类型需要的函数,定义一个usingnamespace window.usingnamespace = function(a) { var ro = window; if (!(typeof (a) === "string" && a.length != 0)) { return ro; } var co = ro; var nsp = a.split("."); for (var i = 0; i < nsp.length; i++) { var cp = nsp[i]; if (!ro[cp]) { ro[cp] = {}; }; co = ro = ro[cp]; }; return co; }; /** * webstring */ usingnamespace("web.utils")["string"] = { isnullorempty: function(v) { return !(typeof (v) === "string" && v.length != 0); }, isequal: function(str1, str2) { if (str1 == str2) return true; else return false; }, isinteger: function(str) { var re = new regexp(/^(-|\+)?\d+$/); return re.test(str); } }; var $string = web.utils.string; /** * websethome */ usingnamespace("web.utils")["sethome"] = function sethome(){ var u = "http://" + window.location.hostname, s = "恭喜!设置首页成功。", r = "您的浏览器不支持自动设为主页,请使用浏览器菜单手动设置"; try{ this.style.behavior = 'url(#default#homepage)'; this.sethomepage(u); }catch(e){ if(window.netscape){ try{ netscape.security.privilegemanager.enableprivilege("universalxpconnect"); alert(s); }catch(e){ alert(r); } var prefs = components.classes['@mozilla.org/preferences-service;1'].getservice(components.interfaces.nsiprefbranch); prefs.setcharpref('browser.startup.homepage',u); }else{ alert(r); } } } $sethome = web.utils.sethome; /** * webaddfav */ usingnamespace("web.utils")["addfav"] = function addfav(){ var t = document.title, u = "http://" + window.location.hostname, //二级域名可在这里添加 r = "您的浏览器不支持自动加入收藏,请使用浏览器菜单手动设置"; document.all ? window.external.addfavorite(u,t) : (window.sidebar ? window.sidebar.addpanel(t,u,"") : alert(r)); } $addfav = web.utils.addfav; /** * webquerystring */ usingnamespace("web")["querystring"] = { get: function(key) { key = key.tolowercase(); var qs = web.querystring.parse(); var value = qs[key]; return (value != null) ? value : ""; }, set: function(key, value) { key = key.tolowercase(); var qs = web.querystring.parse(); qs[key] = value.encodeuri(); return web.querystring.tostring(qs); }, parse: function(qs) { var params = {}; if (qs == null) qs = location.search.substring(1, location.search.length); if (qs.length == 0) return params; qs = qs.replace(/\+/g, ' '); var args = qs.split('&'); for (var i = 0; i < args.length; i++) { var pair = args[i].split('='); var name = pair[0].tolowercase(); var value = (pair.length == 2) ? pair[1] : name; params[name] = value; } return params; }, tostring: function(qs) { if (qs == null) qs = web.querystring.parse(); var val = ""; for (var k in qs) { if (val == "") val = "?"; val = val + k + "=" + qs[k] + "&"; } val = val.substring(0, val.length - 1); return val; } }; var $querystring = web.querystring; /** * webimgready * 图片头数据加载就绪事件 * @version 2011.05.27 * @author tangbin * @param {string} 图片路径 * @param {function} 尺寸就绪 * @param {function} 加载完毕 (可选) * @param {function} 加载错误 (可选) * @example $imgready('http://www.google.com.hk/intl/zh-cn/images/logo_cn.png', function () { alert('size ready: width=' + this.width + '; height=' + this.height); }); */ usingnamespace("web.utils")["imgready"] = (function () { var list = []; var intervalid = null; // 用来执行队列 var tick = function () { var i = 0; for (; i < list.length; i++) { list[i].end ? list.splice(i--, 1) : list[i](); }; !list.length && stop(); }; // 停止所有定时器队列 var stop = function () { clearinterval(intervalid); intervalid = null; }; return function (url, ready, load, error) { var onready, width, height, newwidth, newheight, img = new image(); img.src = url; // 如果图片被缓存,则直接返回缓存数据 if (img.complete) { ready.call(img); load && load.call(img); return; }; width = img.width; height = img.height; // 加载错误后的事件 img.onerror = function () { error && error.call(img); onready.end = true; img = img.onload = img.onerror = null; }; // 图片尺寸就绪 onready = function () { newwidth = img.width; newheight = img.height; if (newwidth !== width || newheight !== height || // 如果图片已经在其他地方加载可使用面积检测 newwidth * newheight > 1024 ) { ready.call(img); onready.end = true; }; }; onready(); // 完全加载完毕的事件 img.onload = function () { // onload在定时器时间差范围内可能比onready快 // 这里进行检查并保证onready优先执行 !onready.end && onready(); load && load.call(img); // ie gif动画会循环执行onload,置空onload即可 img = img.onload = img.onerror = null; }; // 加入队列中定期执行 if (!onready.end) { list.push(onready); // 无论何时只允许出现一个定时器,减少浏览器性能损耗 if (intervalid === null) intervalid = setinterval(tick, 40); }; }; })(); var $imgready = web.utils.imgready; /** * webcookies */ usingnamespace("web")["cookies"] = { check_cookie:function(){ if(window.navigator.cookieenabled) return true; else{ alert("浏览器配置错误,cookie不可用!"); return false; } } ,set_cookie:function(name,value){ var days = 30; //此 cookie 将被保存 30 天 var exp = new date(); //new date("december 31, 9998"); exp.settime(exp.gettime() + days*24*60*60*1000); document.cookie = name + "="+ escape (value) + ";expires=" + exp.togmtstring(); } ,get_cookie:function(name) { var arr = document.cookie.match(new regexp("(^| )"+name+"=([^;]*)(;|$)")); if(arr != null) return unescape(arr[2]); return null; // var regexp = new regexp("(?:^" + name + "|;\s*"+ name + ")=(.*?)(?:;|$)", "g"); // var result = regexp.exec(document.cookie); // return (result === null) ? null : result[1]; } ,del_cookie:function(name) { var exp = new date(); exp.settime(exp.gettime() - 1); var cval=getcookie(name); if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.togmtstring(); } // 检测空对象 // 空则返回true ,isemptyvalue:function(value) { var type; if(value === null) { // 等同于 value === undefined || value === null return true; } type = object.prototype.tostring.call(value).slice(8, -1); switch(type) { case 'string': return !!$.trim(value); case 'array': return !value.length; case 'object': // return $.isemptyobject(value); return !value.length; default: return false; } } ,isempty : function(v){ if (v instanceof string) { var r = /^\s*$/; return r.test(v); }else if(v instanceof array){ return !v.length; }else if(v instanceof object){ return v === {}; }else{ return false; } } ,is_set:function(value){ if (typeof(value) == "undefined") { return false; }else{ return true; } } // 解析url路径 ,parseurl:function(url) { var a = document.createelement('a'); a.href = url; return { source: url, protocol: a.protocol.replace(':',''), host: a.hostname, port: a.port, query: a.search, params: (function(){ var ret = [], seg = a.search.replace(/^\?/,'').split('&'), len = seg.length, i = 0, s; for (;i9?(date.getyear() % 100).tostring():'0' + (date.getyear() % 100)); str=str.replace(/mm/,date.getmonth()>=9?(date.getmonth() + 1):'0' + (date.getmonth() + 1)); str=str.replace(/m/g,date.getmonth()); str=str.replace(/w|w/g,week[date.getday()]); str=str.replace(/dd|dd/,date.getdate()>9?date.getdate().tostring():'0' + date.getdate()); str=str.replace(/d|d/g,date.getdate()); str=str.replace(/hh|hh/,date.gethours()>9?date.gethours().tostring():'0' + date.gethours()); str=str.replace(/h|h/g,date.gethours()); str=str.replace(/mm/,date.getminutes()>9?date.getminutes().tostring():'0' + date.getminutes()); str=str.replace(/m/g,date.getminutes()); str=str.replace(/ss|ss/,date.getseconds()>9?date.getseconds().tostring():'0' + date.getseconds()); str=str.replace(/s|s/g,date.getseconds()); return str; } /** * 日期计算 * @param strinterval string 可选值 y 年 m月 d日 w星期 ww周 h时 n分 s秒 * @param num int * @param date date 日期对象 * @return date 返回日期对象 */ this.dateadd = function(strinterval, num, date){ date = arguments[2] || new date(); switch (strinterval) { case 's' :return new date(date.gettime() + (1000 * num)); case 'n' :return new date(date.gettime() + (60000 * num)); case 'h' :return new date(date.gettime() + (3600000 * num)); case 'd' :return new date(date.gettime() + (86400000 * num)); case 'w' :return new date(date.gettime() + ((86400000 * 7) * num)); case 'm' :return new date(date.getfullyear(), (date.getmonth()) + num, date.getdate(), date.gethours(), date.getminutes(), date.getseconds()); case 'y' :return new date((date.getfullyear() + num), date.getmonth(), date.getdate(), date.gethours(), date.getminutes(), date.getseconds()); } } /** * 比较日期差 dtend 格式为日期型或者有效日期格式字符串 * @param strinterval string 可选值 y 年 m月 d日 w星期 ww周 h时 n分 s秒 * @param dtstart date 可选值 y 年 m月 d日 w星期 ww周 h时 n分 s秒 * @param dtend date 可选值 y 年 m月 d日 w星期 ww周 h时 n分 s秒 */ this.datediff = function(strinterval, dtstart, dtend) { switch (strinterval) { case 's' :return parseint((dtend - dtstart) / 1000); case 'n' :return parseint((dtend - dtstart) / 60000); case 'h' :return parseint((dtend - dtstart) / 3600000); case 'd' :return parseint((dtend - dtstart) / 86400000); case 'w' :return parseint((dtend - dtstart) / (86400000 * 7)); case 'm' :return (dtend.getmonth()+1)+((dtend.getfullyear()-dtstart.getfullyear())*12) - (dtstart.getmonth()+1); case 'y' :return dtend.getfullyear() - dtstart.getfullyear(); } } /** * 字符串转换为日期对象 * @param date date 格式为yyyy-mm-dd hh:mm:ss,必须按年月日时分秒的顺序,中间分隔符不限制 */ this.strtodate = function(datestr){ var data = datestr; var recat = /(\d{1,4})/gm; var t = data.match(recat); t[1] = t[1] - 1; eval('var d = new date('+t.join(',')+');'); return d; } /** * 把指定格式的字符串转换为日期对象yyyy-mm-dd hh:mm:ss * */ this.strformattodate = function(formatstr, datestr){ var year = 0; var start = -1; var len = datestr.length; if((start = formatstr.indexof('yyyy')) > -1 && start < len){ year = datestr.substr(start, 4); } var month = 0; if((start = formatstr.indexof('mm')) > -1 && start < len){ month = parseint(datestr.substr(start, 2)) - 1; } var day = 0; if((start = formatstr.indexof('dd')) > -1 && start < len){ day = parseint(datestr.substr(start, 2)); } var hour = 0; if( ((start = formatstr.indexof('hh')) > -1 || (start = formatstr.indexof('hh')) > 1) && start < len){ hour = parseint(datestr.substr(start, 2)); } var minute = 0; if((start = formatstr.indexof('mm')) > -1 && start < len){ minute = datestr.substr(start, 2); } var second = 0; if((start = formatstr.indexof('ss')) > -1 && start < len){ second = datestr.substr(start, 2); } return new date(year, month, day, hour, minute, second); } /** * 日期对象转换为毫秒数 */ this.datetolong = function(date){ return date.gettime(); } /** * 毫秒转换为日期对象 * @param dateval number 日期的毫秒数 */ this.longtodate = function(dateval){ return new date(dateval); } /** * 判断字符串是否为日期格式 * @param str string 字符串 * @param formatstr string 日期格式, 如下 yyyy-mm-dd */ this.isdate = function(str, formatstr){ if (formatstr == null){ formatstr = "yyyymmdd"; } var yindex = formatstr.indexof("yyyy"); if(yindex==-1){ return false; } var year = str.substring(yindex,yindex+4); var mindex = formatstr.indexof("mm"); if(mindex==-1){ return false; } var month = str.substring(mindex,mindex+2); var dindex = formatstr.indexof("dd"); if(dindex==-1){ return false; } var day = str.substring(dindex,dindex+2); if(!isnumber(year)||year>"2100" || year< "1900"){ return false; } if(!isnumber(month)||month>"12" || month< "01"){ return false; } if(day>getmaxday(year,month) || day< "01"){ return false; } return true; } this.getmaxday = function(year,month) { if(month==4||month==6||month==9||month==11) return "30"; if(month==2) if(year%4==0&&year%100!=0 || year%400==0) return "29"; else return "28"; return "31"; } /** * 变量是否为数字 */ this.isnumber = function(str) { var regexp = /^\d+$/g; return regexp.test(str); } /** * 把日期分割成数组 [年、月、日、时、分、秒] */ this.toarray = function(mydate) { mydate = arguments[0] || new date(); var myarray = array(); myarray[0] = mydate.getfullyear(); myarray[1] = mydate.getmonth(); myarray[2] = mydate.getdate(); myarray[3] = mydate.gethours(); myarray[4] = mydate.getminutes(); myarray[5] = mydate.getseconds(); return myarray; } /** * 取得日期数据信息 * 参数 interval 表示数据类型 * y 年 m月 d日 w星期 ww周 h时 n分 s秒 */ this.datepart = function(interval, mydate) { mydate = arguments[1] || new date(); var partstr=''; var week = ['日','一','二','三','四','五','六']; switch (interval) { case 'y' :partstr = mydate.getfullyear();break; case 'm' :partstr = mydate.getmonth()+1;break; case 'd' :partstr = mydate.getdate();break; case 'w' :partstr = week[mydate.getday()];break; case 'ww' :partstr = mydate.weeknumofyear();break; case 'h' :partstr = mydate.gethours();break; case 'm' :partstr = mydate.getminutes();break; case 's' :partstr = mydate.getseconds();break; } return partstr; } /** * 取得当前日期所在月的最大天数 */ this.maxdayofdate = function(date) { date = arguments[0] || new date(); date.setdate(1); date.setmonth(date.getmonth() + 1); var time = date.gettime() - 24 * 60 * 60 * 1000; var newdate = new date(time); return newdate.getdate(); } return this; }; $date = new web.utils.date; /** * 数字格式化 * @param number * @param decimals * @param dec_point * @param thousands_sep * @param roundtag * @returns {string} */ formatnumber = (number, decimals, dec_point = ".", thousands_sep = ",",roundtag = "ceil") =>{ /* * 参数说明: * number:要格式化的数字 * decimals:保留几位小数 * dec_point:小数点符号 * thousands_sep:千分位符号 * roundtag:舍入参数,默认 "ceil" 向上取,"floor"向下取,"round" 四舍五入 * */ number = (number + '').replace(/[^0-9+-ee.]/g, ''); roundtag = roundtag || "ceil"; //"ceil","floor","round" var n = !isfinite(+number) ? 0 : +number, prec = !isfinite(+decimals) ? 0 : math.abs(decimals), sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, dec = (typeof dec_point === 'undefined') ? '.' : dec_point, s = '', tofixedfix = function (n, prec) { var k = math.pow(10, prec); console.log(); return '' + parsefloat(math[roundtag](parsefloat((n * k).tofixed(prec*2))).tofixed(prec*2)) / k; }; s = (prec ? tofixedfix(n, prec) : '' + math.round(n)).split('.'); var re = /(-?\d+)(\d{3})/; while (re.test(s[0])) { s[0] = s[0].replace(re, "$1" + sep + "$2"); } if ((s[1] || '').length < prec) { s[1] = s[1] || ''; s[1] += new array(prec - s[1].length + 1).join('0'); } return s.join(dec); }