• JQuery扩展方法实现Form表单与Json互相转换


    1.把表单转换出json对象

     //把表单转换出json对象
        $.fn.toJson = function () {
            var self = this,
                json = {},
                push_counters = {},
                patterns = {
                    "validate": /^[a-zA-Z][a-zA-Z0-9_]*(?:[(?:d*|[a-zA-Z0-9_]+)])*$/,
                    "key": /[a-zA-Z0-9_]+|(?=[])/g,
                    "push": /^$/,
                    "fixed": /^d+$/,
                    "named": /^[a-zA-Z0-9_]+$/
                };
    
            this.build = function (base, key, value) {
                base[key] = value;
                return base;
            };
    
            this.push_counter = function (key) {
                if (push_counters[key] === undefined) {
                    push_counters[key] = 0;
                }
                return push_counters[key]++;
            };
    
            $.each($(this).serializeArray(), function () {
                // skip invalid keys
                if (!patterns.validate.test(this.name)) {
                    return;
                }
    
                var k,
                    keys = this.name.match(patterns.key),
                    merge = this.value,
                    reverse_key = this.name;
    
                while ((k = keys.pop()) !== undefined) {
                    // adjust reverse_key
                    reverse_key = reverse_key.replace(new RegExp("\[" + k + "\]$"), '');
    
                    // push
                    if (k.match(patterns.push)) {
                        merge = self.build([], self.push_counter(reverse_key), merge);
                    }
    
                    // fixed
                    else if (k.match(patterns.fixed)) {
                        merge = self.build([], k, merge);
                    }
    
                    // named
                    else if (k.match(patterns.named)) {
                        merge = self.build({}, k, merge);
                    }
                }
    
                json = $.extend(true, json, merge);
            });
    
            return json;
        };
    

      

    2.将josn对象赋值给form

    //将josn对象赋值给form
        $.fn.loadData = function (obj) {
            var key, value, tagName, type, arr;
    
            this.reset();
    
            for (var x in obj) {
                if (obj.hasOwnProperty(x)) {
                    key = x;
                    value = obj[x];
    
                    this.find("[name='" + key + "'],[name='" + key + "[]']").each(function () {
                        tagName = $(this)[0].tagName.toUpperCase();
                        type = $(this).attr('type');
                        if (tagName == 'INPUT') {
                            if (type == 'radio') {
                                if ($(this).val() == value) {
                                        $(this).attr('checked', true);
                                }
                            } else if (type == 'checkbox') {
                                arr = value.split(',');
                                for (var i = 0; i < arr.length; i++) {
                                    if ($(this).val() == arr[i]) {
                                            $(this).attr('checked', true);
                                        break;
                                    }
                                }
                            } else {
                                $(this).val(value);
                            }
                        } else if (tagName == 'SELECT' || tagName == 'TEXTAREA') {
                            $(this).val(value);
                        }
                    });
                }
            }
        }
    

      

  • 相关阅读:
    2017福建夏令营Day7(数论)
    2017福建夏令营Day3(搜索)
    【FZSZ2017暑假提高组Day9】猜数游戏(number)
    【FZSZ2017暑假提高组Day6】bd
    POJ 3660 传递闭包问题
    NOIP 提高组 2002 均分纸牌
    POJ 2387 Til the Cows Come Home
    NOIP 2016 Day2 T1 组合数问题
    06--ubuntu的sqlite安装
    ARM架构与体系学习(二)——3级流水线
  • 原文地址:https://www.cnblogs.com/fireicesion/p/11009680.html
Copyright © 2020-2023  润新知