form表单序列化-serializeObject-支持属性链

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,有需求的可以直接使用,或者优化后使用,并希望共享代码,造福大众~

猜你喜欢

转载自my.oschina.net/WXiaoqiang/blog/1794469