jquery 扩展,动态提取或填充表单元素数据


_jsonDataGetValue=function(elmt,container){
    var format=elmt.attr("format"),type=elmt[0].type;
    if(type=="radio"){
        return elmt[0].checked ? elmt[0].value : (elmt.attr("uncheckvalue")|| "");
    }else if(type=="checkbox"){
        var isArray=elmt.attr("isArray");
        var split=elmt.attr("split")|| ",";
        var values=[];
        var chks=container.find("input[name='"+elmt[0].name+"']:checked");
        for (var i=0; i < chks.length; i++) {
            values.push(chks[i].value);
        };
        return isArray ? values : values.join(split);
    }esle if(format=="date" || format=="datetime"){
       
       
    }else{
        return elmt.val();
    }
}
/**
 *@param {jqDom} elmt
 *@param {String} value 
 */
_jsonDataSetValue=function(elmt,value){
    var tagName=elmt[0].tagName,type=elmt[0].type;
    if(tagName=="LABEL"){
        elmt.text(value);
    }else if(type=="radio"){
        (value==elmt[0].value) ? (elmt[0].checked=true) : elmt.removeAttr("checked");
    }else if(type=="checkbox"){
        if(value !==null){
            var values=(""+value).split(elmt.attr("split") || ",");
            for (var i=0; i < values.length; i++) {
                 if(values[i]==elmt[0].value){
                     elmt[0].checked=true;
                     return;
                 }
            };
            elmt.removeAttr("checked");
        }else{
            elmt.removeAttr("checked");
        }
    }else{
        elmt.val(value);
    }
}
/**
 * 拿到本dom容器中的所有输入元素(:input)的value,根据元素name 生产一个json格式的数据集对象返回。
 * 或将一个json格式的数据对象填充或绑定的本dom容器form元素中
 * @param {Object} data 需要填充或绑定到本dom容器元素中 的数据
 */
$.fn.jsonData=function(data){
    //声明将要用到的变量
    var elmtName,elmtValue,elmt,elmts=this.find(":input[name]").toArray();

    //判断是否传递了用于填充的数据对象
    if(data && typeof data=="object"){
        //如果传递了 data参数,则将data中的数据绑定到容器中的form元素中
        elmts=elmts.concat(this.find("label[name]").toArray());
        for(var i=0;i<elmts.length;i++){
            elmt=$(elmts[i]);
            elmtName=elmt.attr("name");
            //根据elmtName取出data中相对应得数据
            try{elmtValue=eval("data."+elmtName);}catch(e){}
            if(typeof elmtValue!="undefined"){
                _jsonDataSetValue(elmt,elmtValue);
            }
        }
      return this;
    }else{
        //如果没有任何参数,则需取出容器中的输入元素值,根据其name封装成对象返回
        //用户缓存已经 设置或读取过的 name 属性,(相同name元素在同一次jsonData操作中的不会读取第二次)
        var currObj={};
        var  cache={};
        for(var i=0;i<elmts.length;i++){
            elmt=$(elmts[i]);
            elmtName=elmt.attr("name");
            if(cache[elmtName]){
                //如果该同名元素已经读取过,将跳过该元素
                continue;
            }
         
            var attrs=elmtName.match(/[a-zA-Z0-9_]+/g);
            for (var j=1; j < attrs.length-1; j++) {
                if(typeof currObj[attrs[j-1]]!="object"){
                    if(isNaN(attrs[j])){
                        currObj=currObj[attrs[j-1]]=currObj[attrs[j-1]] || {};
                    }else{
                        currObj=currObj[attrs[j-1]]=currObj[attrs[j-1]] || [];
                    }
                }
            };
            var lastAttr=attrs[attrs.length-1];
            if(!isNaN(lastAttr)){
                lastAttr=parseInt(lastAttr);
            }
            currObj[lastAttr]=_jsonDataGetValue(elmt,this);
            //读取后,缓存该名称,下次同名元素将不再读取,直接跳过
            cache[elmtName]=true;
        }
           
        return currObj;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值