// JavaScript Document /* 常用的公共函数以及对象 **/ // 对Date的扩展,将 Date 转化为指定格式的String // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) // 例子: // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18 Date.prototype.Format = function(fmt) { //author: meizz var o = { "M+" : this.getMonth()+1, //月份 "d+" : this.getDate(), //日 "h+" : this.getHours(), //小时 "m+" : this.getMinutes(), //分 "s+" : this.getSeconds(), //秒 "q+" : Math.floor((this.getMonth()+3)/3), //季度 "S" : this.getMilliseconds() //毫秒 }; if(/(y+)/.test(fmt)) fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); for(var k in o) if(new RegExp("("+ k +")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length))); return fmt; }; //扩展日期对象,时间对象进行加减运算 Date.prototype.add=function(obj){ //args:{"year":1,"day":-1} var y=this.getFullYear(),m=this.getMonth()+1,days=this.getDate(),d=0; if(typeof obj !='object'){return this;} for(var q in obj){ if(q=='year'){ y += obj[q]; }else if(q=='month'){ m += obj[q]; if(m>12){ y += parseInt(m/12); m=m%12; } if(m<1){ y += parseInt(m/12)-1; m=12+m%12; } }else if(q=='day'){ d += obj[q]; } } return new Date(new Date(y+"/"+m+"/"+days).getTime()+d*24*60*60*1000); }; String.prototype.replaceAll = function (FindText, RepText) { var regExp = new RegExp(FindText, "g"); return this.replace(regExp, RepText); }; //绑定函数执行作用域,object->作用域,fun->需执行的函数 function bind(object, fun) { return function() { return fun.apply(object, arguments); }; }; function getCookieVal(offset) { var endstr = document.cookie.indexOf (";", offset); if (endstr == -1) endstr = document.cookie.length; return unescape(document.cookie.substring(offset, endstr)); }; //获取Cookies的通用方法 function GetCookie (name) { var arg = name + "="; var alen = arg.length; var clen = document.cookie.length; var i = 0; while (i < clen) { var j = i + alen; if (document.cookie.substring(i, j) == arg) return this.getCookieVal (j); i = document.cookie.indexOf(" ", i) + 1; if (i == 0) break; } return null; }; //设置Cookies的通用方法 function SetCookie(name, value, expire) { var argv = this.SetCookie.arguments; var argc = this.SetCookie.arguments.length; var ex = (typeof expire !="undefined")?expire:(3650*24*60*60*1000); var expires=new Date(); expires.setTime(expires.getTime()+ex); var path = (3 < argc) ? argv[3] : null; var domain = (4 < argc) ? argv[4] : null; var secure = (5 < argc) ? argv[5] : false; document.cookie = name + "=" + escape (value) + ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + ((path == null) ? "" : ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) + ((secure == true) ? "; secure" : ""); }; function DelCookie(name) { var expires = new Date(); expires.setTime(expires.getTime() - 1); var cval=GetCookie(name); if(cval!=null) document.cookie= name + "="+cval+";expires="+expires.toGMTString(); }; function getClientData(name){ var val = ''; try{ if(window.localStorage){ val = localStorage[name]; }else{ var reg = new RegExp("(^|(;\\s))"+name+"=([^;]*)"); var matchCookie = document.cookie.match(reg); if(matchCookie && matchCookie.length >= 2){ val = matchCookie[3]; } } }catch(e){}; return val; }; function setClientData(name, value){ try{ if(window.localStorage){ localStorage[name] = value; }else{ var now = new Date(); now = now.setDate(now.getDate() + 1); document.cookie = name + '=' + value + ';expires=' + new Date(now).toGMTString(); } }catch(e){}; }; function delClientData(name){ if(window.localStorage){ localStorage.removeItem(name); }else{ var now = new Date(); now = now.setDate(now.getDate() - 1); document.cookie = name + '=' + getClientData(name) + ';expires=' + new Date(now).toGMTString(); } }; //创建页面所需样式 function createStyle(X) { try{ var G = document.createStyleSheet(); G.cssText = X; } catch (e) { var C = document.createElement("style"); C.type = "text/css"; C.appendChild(document.createTextNode(X)); document.getElementsByTagName("HEAD")[0].appendChild(C); } }; //解析模版,返回解析后的字符串数据 //var _tem = "{name}{id}"; //var _json = [{'name':"张三",'id':"112"},{'name':"李四",'id':"113"}]; //renderHtml(_tem,_json) function renderHtml(_tem,_jsonArr) { if(typeof _tem!="undefined"&&typeof _jsonArr!="undefined") { var _html = []; var _arr = _jsonArr; if(Object.prototype.toString.call(_arr) != '[object Array]') { _arr = [_jsonArr]; } for(var i=0;i<_arr.length;i++) { var _rec = _tem; for (k in _arr[i]) { _rec = _rec.replaceAll("{"+k+"}", _arr[i][k]); } _html.push(_rec); } return _html.join(""); } else { return ""; } }; //获取表单要提交的数据的字符串 formObj--表单对象 function getFormStr(formObj) { var elements = formObj.elements; var postContent = ""; for (var i = 0; i < elements.length; ++i) { var element = elements[i]; if(!element.name||element.getAttribute('allow'))continue;//对于没有设置name属性的表单不提交 if (element.type == "text" || element.type == "number" || element.type == "email" || element.type == "url" || element.type == "range" || element.type == "textarea"|| element.type == "hidden") { postContent += encodeURIComponent(element.name) + "="+ encodeURIComponent(element.value) + "&"; } else if (element.type == "select-one" || element.type == "select-multiple") { var options = element.options, j, item; for (j = 0; j < options.length; ++j) { item = options[j]; if (item.selected) { postContent += encodeURIComponent(element.name) + "="+ encodeURIComponent(item.value) + "&"; } } } else if (element.type == "checkbox" || element.type == "radio") { if (element.checked) {//存在的问题:如果只是单个的checkbox,把其从选中改为取消选中时,此时不能得到提交 postContent += encodeURIComponent(element.name) + "="+ encodeURIComponent(element.value) + "&"; } } else if (element.type == "file") { if (element.value != "") { postContent += encodeURIComponent(element.name) + "="+ encodeURIComponent(element.value) + "&"; } } else { postContent += encodeURIComponent(element.name) + "="+ encodeURIComponent(element.value) + "&"; } } return postContent; }; //加载表单数据 function setFormStr(formObj,data) { var elements = formObj.elements; for (var i = 0; i < elements.length; ++i) { var element = elements[i]; if(!element.name||element.getAttribute('switch'))continue;//对于没有设置name属性的 和 开关值为空的 则不加载当前的数据 var key = element.getAttribute('name'); var nameVal = eval("data."+key); if(nameVal||nameVal==""){//当data数据中存在和name属性对于的值的时候,才设置当前数据的值 if (element.type == "text" || element.type == "number" || element.type == "email" || element.type == "url" || element.type == "range" || element.type == "password" || element.type == "textarea"|| element.type == "hidden") { element.value = nameVal; }else if (element.type == "select-one" || element.type == "select-multiple"){ var options = element.options, j, item; for (j = 0; j < options.length; ++j) { item = options[j]; if(item.value==nameVal){ item.selected = true; } } } else if (element.type == "radio") { if(element.value==nameVal){ element.checked = true; } } else if (element.type == "checkbox") {//如果是复选框,针对多个被选择的情况 var tp = [nameVal+""]; nameVal+=""; if(nameVal.indexOf(',')>-1){ tp = nameVal.split(','); }else if(nameVal.indexOf('|')>-1){ tp = nameVal.split('|'); }else if(nameVal.indexOf('#')>-1){ tp = nameVal.split('#'); } for(var k=0;k传入的数组 function unique(arr) { var result = [], hash = {}; for (var i = 0, elem; (elem = arr[i]) != null; i++) { if (!hash[elem]) { result.push(elem); hash[elem] = true; } } return result; }; //返回时区偏移的秒数 function timezoneOffset() { var d = new Date(); var hours = d.getTimezoneOffset(); return -(hours*60); }; //表单重置处理ff浏览器下hidden类型不能重置的问题 function resetForm(formObj){ if(!formObj) return; formObj.reset(); var elements = formObj.elements; for (var i = 0; i < elements.length; ++i) { var element = elements[i]; if(element.type == "hidden"){ element.value = ""; } } }; //表单重置处理ff浏览器下hidden类型不能重置的问题 function resetSomeForm(formObj){ //formObj.reset(); var elements = formObj.elements; for (var i = 0; i < elements.length; ++i) { var element = elements[i]; if(!element.name||element.getAttribute('noreset'))continue;//对于没有设置name属性的表单不提交 if (element.type == "text" || element.type == "number" || element.type == "email" || element.type == "url" || element.type == "textarea"|| element.type == "hidden") { element.value = ""; } } }; function scrollToLocation(mainContainer,scrollToContainer) { mainContainer.scrollTop( scrollToContainer.offset().top - mainContainer.offset().top + mainContainer.scrollTop() ); //动画效果 //mainContainer.animate({ //scrollTop: scrollToContainer.offset().top - mainContainer.offset().top + mainContainer.scrollTop() //}, 200);//2秒滑动到指定位置 }; //获取文本的尺寸 function getHtmlSize(html) { var dummyTextNode = document.getElementById('dummyTextNode'); //创建dummyTextNode对象 if(!dummyTextNode) { dummyTextNode = document.createElement("span"); dummyTextNode.id = 'dummyTextNode'; dummyTextNode.style.display = 'none'; document.body.appendChild(dummyTextNode); } var size = {}; dummyTextNode.innerHTML = html; dummyTextNode.style.display = ''; size.w = dummyTextNode.offsetWidth; size.h = dummyTextNode.offsetHeight; dummyTextNode.style.display = 'none'; return size; }; //浏览器页面显示时间处理 function getBrowserVisibilityEventKey() { var hidden = "hidden"; var state = "visibilityState"; var visibilityChange = "visibilitychange"; var prefix = ['webkit', 'moz', 'o', 'ms']; for(var i=0;i