栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

javascript表单域与json数据间的交互第1/3页

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

javascript表单域与json数据间的交互第1/3页

包括对象中有集合属性、对象中引用其他对象属性:
复制代码 代码如下:

function jsonObjectToForm(form, jsonObject){
    for(i = 0, max = form.elements.length; i < max; i++) {
        e = form.elements[i];
        eName = e.name;
        if(eName.indexOf('.') > 0){
            dotIndex = eName.indexOf('.');
            parentName = eName.substring(0, dotIndex);
            childName = eName.substring(dotIndex+1);
            //迭代判断eName,组装成json数据结构
            evalue = iterValueFromJsonObject(jsonObject, parentName, childName);
        }else{
            evalue = jsonObject[eName];
        }
        if(evalue && evalue != "undefined" && evalue != "null"){
            switch(e.type){
                case 'checkbox':
                case 'radio':
                    if(e.value == evalue){
                        e.checked = true;
                    }
                    break;
                case 'hidden':
                case 'password':
                case 'textarea':
                case 'text':
                    e.value = evalue;
                    break;
                case 'select-one':
                case 'select-multiple':
                    for(j = 0; j < e.options.length; j++){
                        op = e.options[j];
                        //alert("eName : " + eName + "; op value : " + op.value + "; evalue : " + evalue);
                        if(op.value == evalue){
                            op.selected = true;
                        }
                    }
                    break;
                case 'button':
                case 'file':
                case 'image':
                case 'reset':
                case 'submit':
                default:
            }
        }
    }
}


function formToJsonObject(form){
    var jsonObject = {};
    for(i = 0, max = form.elements.length; i < max; i++) {
        e = form.elements[i];
        em = new Array();
        if(e.type == 'select-multiple'){
            for(j = 0; j < e.options.length; j++){
                op = e.options[j];
                if(op.selected){
                    em[em.length] = op.value;
                }
            }
        }
        switch(e.type){
            case 'checkbox':
            case 'radio':
                if (!e.checked) { break; }
            case 'hidden':
            case 'password':
            case 'select-one':
            case 'select-multiple':
            case 'textarea':
            case 'text':
                eName = e.name;
                if(e.type == 'select-multiple'){
                    evalue = em;
                }else{
                    evalue = e.value.replace(new RegExp('(["\\])', 'g'), '\$1');
                }
                //判断是否是对象类型数据
                if(eName.indexOf('.') > 0){
                    dotIndex = eName.indexOf('.');
                    parentName = eName.substring(0, dotIndex);
                    childName = eName.substring(dotIndex+1);
                    //迭代判断eName,组装成json数据结构
                    iterJsonObject(jsonObject, parentName, childName, evalue);
                }else{
                    jsonObject[eName] = evalue;
                }
                break;
            case 'button':
            case 'file':
            case 'image':
            case 'reset':
            case 'submit':
            default:
        }
    }
    return jsonObject;
}


function iterJsonObject(jsonObject, parentName, childName, evalue){
    //pArrayIndex用于判断元素是否是数组标示
    pArrayIndex = parentName.indexOf('[');
    //判断是否集合数据,不是则只是对象属性
    if(pArrayIndex < 0){
        var child = jsonObject[parentName];
        if(!child){
            jsonObject[parentName] = {};
        }
        dotIndex = childName.indexOf('.');
        if(dotIndex > 0){
            iterJsonObject(jsonObject[parentName], childName.substring(0, dotIndex), childName.substring(dotIndex+1), evalue);
        }else{
            jsonObject[parentName][childName] = evalue;
        }
    }else{
        pArray = jsonObject[parentName.substring(0, pArrayIndex)];
        //若不存在js数组,则初始化一个数组类型
        if(!pArray){
            jsonObject[parentName.substring(0, pArrayIndex)] = new Array();
        }
        //取得集合下标,并判断对应下标是否存在js对象
        arrayIndex = parentName.substring(pArrayIndex+1, parentName.length-1);
        var c = jsonObject[parentName.substring(0, pArrayIndex)][arrayIndex];
        if(!c){
            jsonObject[parentName.substring(0, pArrayIndex)][arrayIndex] = {};
        }
        dotIndex = childName.indexOf('.');
        if(dotIndex > 0){
            iterJsonObject(jsonObject[parentName.substring(0, pArrayIndex)][arrayIndex], childName.substring(0, dotIndex), childName.substring(dotIndex+1), evalue);
        }else{
            jsonObject[parentName.substring(0, pArrayIndex)][arrayIndex][childName] = evalue;
        }
    }
}


function iterValueFromJsonObject(jsonObject, parentName, childName){
    //pArrayIndex用于判断元素是否是数组标示
    pArrayIndex = parentName.indexOf('[');
    //判断是否集合数据,不是则只是对象属性
    if(pArrayIndex < 0){
        dotIndex = childName.indexOf('.');
        if(dotIndex > 0){
            return iterValueFromJsonObject(jsonObject[parentName], childName.substring(0, dotIndex), childName.substring(dotIndex+1));
        }else{
            return jsonObject[parentName][childName]
        }
    }else{
        pArray = jsonObject[parentName.substring(0, pArrayIndex)];
        //取得集合下标,并判断对应下标是否存在js对象
        arrayIndex = parentName.substring(pArrayIndex+1, parentName.length-1);
        var c = jsonObject[parentName.substring(0, pArrayIndex)][arrayIndex];
        dotIndex = childName.indexOf('.');
        if(dotIndex > 0){
            return iterValueFromJsonObject(jsonObject[parentName.substring(0, pArrayIndex)][arrayIndex], childName.substring(0, dotIndex), childName.substring(dotIndex+1));
        }else{
            return jsonObject[parentName.substring(0, pArrayIndex)][arrayIndex][childName]
        }
    }
}

123下一页阅读全文
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/118949.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号