form序列化成json串

 

;(function($){
/**
 * 依赖jquery-1.4.2
 * 依赖jquery.json-2.2,参考http://code.google.com/p/jquery-json/
 * 用于将form序列化成json串,并且可以反序列化添充回来
 * 作者:段旭光 2010-08-08
 */
$.fn.serializeObjectToJson = function()
{
	/**
	 * 此方法代码参考:http://css-tricks.com/snippets/jquery/serialize-form-to-json/
	 */
   var o = {};
   var a = this.serializeArray();
   $.each(a, function() {
       if (o[this.name]) {
           if (!o[this.name].push) {
               o[this.name] = [o[this.name]];
           }
           o[this.name].push(this.value || '');
       } else {
           o[this.name] = this.value || '';
       }
   });
   return o;
  // return $.toJSON(o);
};
/**
 * 按json格式添充现有form,基中json的key对应form内的元素name
 * 支持input、radio、select、textarea单值或多值
 * 参数json为json对象
 */
$.fn.unSerializeObjectFromJson = function(json)
{
	if(!json) return;
	var values=eval('('+json+')');
	var form=this;
	/**
	 * 得到现有form表单的内容,如果表单有默认值则全部清空,主要针对单值表单项,如:checkbox、radio,因为这些项如果不选中会不被序列化记录暂存,所以
	 * 在反序列化时,无法处理可能存在默认值的这些表单项,所以这里做一下特殊处理
	 */
	var defaultFormJsonValues=form.serializeObjectToJson();
	$.each(defaultFormJsonValues, function(key, value){
		var object=form.find("*[name='"+key+"']");
		if(object.length==1){
			if(object.attr("type").toLowerCase()=='radio' || object.attr("type").toLowerCase()=='checkbox'){
				object.attr("checked",false);
			}
		}
	});
	//加载需要添充的表单内容
	$.each(values, function(key,value){
		var object=form.find("*[name='"+key+"']");//得到form内指定name的控件
		if(object.length==1){
			if(object.attr("type").toLowerCase()=='radio' || object.attr("type").toLowerCase()=='checkbox'){
				if(object.val()==value){
					object.attr("checked",true);
				}
				return true;
			}else{
				object.val(value);
			}
		}else if(object.length>1){
			object.each(function(i){
				if(object.attr("type").toLowerCase()=='radio' || object.attr("type").toLowerCase()=='checkbox'){
					if($.inArray($(this).val(),value)!=-1){
						$(this).attr("checked",true);
					}else{
						$(this).attr("checked",false);
					}
				}else{
					$(this).val(value[i]);
				}
			});
		}
	});

};
/**
 * 得到当前年的第一天
 */
$.getCurrentYearFirstDay=function(format){
	var date=new Date();
	var fDate=new Date(date.getFullYear(),0,1,0,0,0,0);
	return $.getFormateDate(format,fDate);
};
/**
 * 得到当前年的最后一天
 */
$.getCurrentYearLastDay=function(format){
	var date=new Date();
	var fDate=new Date(date.getFullYear(),11,31,23,59,59,999);
	return $.getFormateDate(format,fDate);
};
/**
 * 得到当前月的第一天
 */
$.getCurrentMonthFirstDay=function(format){
	var date=new Date();
	var fDate=new Date(date.getFullYear(),date.getMonth(),1,0,0,0,0);
	return $.getFormateDate(format,fDate);
};
/**
 * 得到当前月的最后一天
 */
$.getCurrentMonthLastDay=function(format){
	var date=new Date();
	var fDate=new Date(date.getFullYear(),date.getMonth()+1,0,23,59,59,999);
	return $.getFormateDate(format,fDate);
};
/**
 * 格式化日期
 */
$.getFormateDate = function(fmt,date){
	if(!date) date=new Date();
	var o={   
    "M+" : date.getMonth()+1, //月份     
    "d+" : date.getDate(), //日     
    "h+" : date.getHours()%12 == 0 ? 12 : date.getHours()%12, //小时
    "H+" : date.getHours(), //小时
    "m+" : date.getMinutes(), //分
    "s+" : date.getSeconds(), //秒
    "q+" : Math.floor((date.getMonth()+3)/3), //季度
    "S" : date.getMilliseconds() //毫秒
    };
    var week={
    "0" : "\u65e5",
    "1" : "\u4e00",
    "2" : "\u4e8c",
    "3" : "\u4e09",
    "4" : "\u56db",
    "5" : "\u4e94",
    "6" : "\u516d"    
    };
    if(/(y+)/.test(fmt)){ 
        fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));     
    }     
    if(/(E+)/.test(fmt)){
        fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "\u661f\u671f" : "\u5468") : "")+week[date.getDay()+""]);     
    }     
    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;
};
})(jQuery);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值