Jquery插件序列化表单替JSON对象
Jquery插件序列化表单为JSON对象
// 合并赋值 function mergeSetValue(object, name, value, merge) { // 相同的name不进行替换,而是进行合并,合并成为一个数组 if (merge == false) { object[name] = value; } else { // 相同的name不进行替换,而是进行合并,合并成为一个数组 if (object[name]) { if ($.isArray(object[name])) { object[name].push(value); } else { object[name] = [object[name], value]; } } else { object[name] = value; } } } // 解析变量 function resolveVarName(object, name, value, merge) { // 识别是否符合格式:A[A][]、A[A]、A[A][A] // 不符合则当成字符串,符合则解析成对象 if (new RegExp("^[a-zA-Z_][a-zA-Z0-9_]+((\\[[a-zA-Z0-9_]+\\]))*(\\[\\])?$").test(name)) { // 识别出[A]部分 var subNames = name.match(new RegExp("\\[[a-zA-Z0-9_]+\\]", "g")); // 如果不包含“[”则直接赋值返回 if (name.indexOf("[") < 0) { // 相同的name不进行替换,而是进行合并,合并成为一个数组 mergeSetValue(object, name, value, merge); return object; } // 识别出变量名 var var_name = name.substring(0, name.indexOf("[")); if (object[var_name] == undefined) { object[var_name] = []; } // 设置临时变量 var temp = object[var_name]; for (i in subNames) { var subName = subNames[i]; if (temp[subName] == undefined) { temp[subName] = []; } if (i == subNames.length - 1) { // 如果是以[]结尾则代表为数组 if (new RegExp("\\[\\]$").test(name)) { temp[subName].push(value); } else { // 相同的name不进行替换,而是进行合并,合并成为一个数组 mergeSetValue(temp, subName, value, merge); } } temp = temp[subName]; } if (subNames == null || subNames.length == 0) { // 如果是以[]结尾则代表为数组 if (new RegExp("\\[\\]$").test(name)) { object[var_name].push(value); } else { // 相同的name不进行替换,而是进行合并,合并成为一个数组 mergeSetValue(object, var_name, value, merge); } } return object; } else { if (merge == false) { object[name] = value; } else { // 相同的name不进行替换,而是进行合并,合并成为一个数组 mergeSetValue(object, name, value, merge); } return object; } } /** * 将表单序列号为JSON对象 * * @param merge * 相同name的元素是否进行合并,默认不进行合并,true-进行合并 false-不进行合并 */ $.fn.serializeJson = function(merge) { if (merge == undefined || merge == null) { merge = false; } var serializeObj = {}; var array = []; // 判断当前元素是否为input元素 if ($(this).is(":input")) { array = $(this).serializeArray(); } else { array = $(this).find(":input").serializeArray(); } $(array).each(function() { resolveVarName(serializeObj, this.name, this.value, merge); }); return serializeObj; };
一般这样:
也可以这样玩: