// 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类型 short->缩写 removeToday->是否包含今天
function queryByDate(type, short, removeToday)
{
var picker = new DatePicker({
beginTimeInput:!short?$("#beginTimeHour"):$("#beginTimeDay"),
endTimeInput: !short?$("#endTimeHour"):$("#endTimeDay")
});
switch (type) {
case 1:
picker.setToday(short);
break;
case 2:
picker.setYesterday(short);
break;
case 3:
picker.setThisWeek(short, removeToday);
break;
case 4:
picker.setLastWeek(short);
break;
case 5:
picker.setThisMonth(short, removeToday);
break;
case 6:
picker.setLastMonth(short);
}
$("#btn_search").click();
};
//替换URL上的参数
function changeURLArg(url,arg,arg_val){
var pattern=arg+'=([^&]*)';
var replaceText=arg+'='+arg_val;
if(url.match(pattern)){
var tmp='/('+ arg+'=)([^&]*)/gi';
tmp=url.replace(eval(tmp),replaceText);
return tmp;
}else{
if(url.match('[\?]')){
return url+'&'+replaceText;
}else{
return url+'?'+replaceText;
}
}
return url+'\n'+arg+'\n'+arg_val;
}
var getUrlParam = function (url,name){
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = typeof url.split('?')[1] != "undefined" ? url.split('?')[1].substr(0).match(reg) : null; //匹配目标参数
if (r != null) return unescape(r[2]);
return null; //返回参数值
};
//<> 转码
function html2Escape(shtml){
return shtml.replace(/[<>&"]/g,function(c){return {'<':'<','>':'>','&':'&','"':'"'}[c];});
}
//加密
function encryptPwd(v){
if(typeof Base64 == "undefined") return v;
try{
v = Base64.encode(Base64.encode(v));
}catch(e){};
return v;
}
//解密
function decryptPwd(v){
if(typeof Base64 == "undefined") return v;
try{ v = Base64.decode(Base64.decode(v)); }catch(e){};
return v;
}
//空方法
function callbackGoogleMap(){
}
/**
* 复制内容
* @param {String} id [需要粘贴的内容]
* @param {String} attr [需要 copy 的属性,默认是 innerText,主要用途例如赋值 a 标签上的 href 链接]
*
* 使用举例:
* input:text#ipt-txt
* copy('ipt-txt','value');
*
* range + selection
* 1.创建一个 range
* 2.把内容放入 range
* 3.把 range 放入 selection
*
* 注意:参数 attr 不能是自定义属性
* 注意:对于 user-select: none 的元素无效
* 注意:当 id 为 false 且 attr 不会空,会直接复制 attr 的内容
*/
function copy (id, attr) {
var target = null;
if (attr) {
target = document.createElement('div');
target.id = 'tempTarget';
target.style.opacity = '0';
if (id) {
var curNode = document.querySelector('#' + id);
target.innerText = curNode[attr];
} else {
target.innerText = attr;
}
document.body.appendChild(target);
} else {
target = document.querySelector('#' + id);
}
try {
var range = document.createRange();
range.selectNode(target);
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
document.execCommand('copy');
window.getSelection().removeAllRanges();
//console.log('复制成功')
} catch (e) {
//console.log('复制失败')
}
if (attr) {
// remove temp target
target.parentElement.removeChild(target);
}
}