jquery serializeObject 扩展,网上能找到的多为一下版本。
$.fn.serializeObject = function() {
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;
};
此版本是不支持属性链的,但是后台接口经常会有类嵌套,此时需要用到属性链,因此我对此方法加入了else分支,
$.fn.serializeObject = function(){
var json = {};
var data = this.serializeArray();
$.each(data, function() {
if(this.name.indexOf(".")<0){
if (json[this.name] !== undefined) {
if (!json[this.name].push) {
json[this.name] = [json[this.name]];
}
json[this.name].push(this.value || '');
} else {
json[this.name] = this.value || '';
}
}else{
var nameChain=this.name.split(".");
var target=json;
var parent = null;
var targetName=null;
for(var i=0;i<nameChain.length;i++){
var name=nameChain[i];
if(nameChain.length-1 == i){
if(target.length){
target=target[target.length-1];
}
if(target[name] !== undefined){
if(!parent[targetName].length){
parent[targetName]=[target];
}
target={};
parent[targetName].push(target);
}
target[name]=this.value || '';
}else{
if(target[name] === undefined){
target[name]={};
}
parent=target;
targetName=name;
target=parent[targetName];
}
}
}
});
return json;
};
代码未经过优化处理,但功能基本ok,有需求的可以直接使用,或者优化后使用,并希望共享代码,造福大众~