jQuery扩展方法实现Form表单与Json互相转换的实例代码


Posted in jQuery onSeptember 05, 2018

JQuery笔记

记两段代码,使用JQuery实现从表单获取json与后端交互,以及把后端返回的json映射到表单相应的字段上。

把表单转换出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;
  };

将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);
          }
        });
      }
    }
  }

补充:下面看下jQuery两种扩展方法

在jQuery中,有两种扩展方法

1.类方法($.extend())

<script> 
   $.extend({
    print1:function(name){      //print1是自己定义的函数名字,括号中的name是参数
      console.log(name)
    }
  });
   $.print1("坤") ;              //调用时直接$.函数名(参数);
</script>

2.对象方法($.fn.extend())

<body>
  <input type="text">
  <script>
      $.fn.extend({
      getMax:function(a,b){
        var result=a>b?a:b;
        console.log(result);
      }
    });
    $("input").getMax(1,2);    //调用时要$(标签名).函数名();
  </script>
</body>

3.一般情况下,jQuery的扩展方法写在自执行匿名函数中(原因:在js中是以函数为作用域的,在函数中写可以避免自己定义的函数或者变量与外部冲突)

<script>
  (function(){
    $.extent({
      print1:function(){
      console.log(123);
      }
    })
  })();
</script>

总结

以上所述是小编给大家介绍的jQuery扩展方法实现Form表单与Json互相转换的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

jQuery 相关文章推荐
基于Jquery Ajax type的4种类型(详解)
Aug 02 jQuery
jQuery图片缩放插件smartZoom使用实例详解
Aug 25 jQuery
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
Oct 19 jQuery
jquery根据name取得select选中的值实例(超简单)
Jan 25 jQuery
jQuery+Cookie实现切换皮肤功能【附源码下载】
Mar 25 jQuery
jQuery获取随机颜色的实例代码
May 21 jQuery
jQuery实现为动态添加的元素绑定事件实例分析
Sep 07 jQuery
jQuery实现获取当前鼠标位置并输出功能示例
Jan 05 jQuery
jQuery表单元素过滤选择器用法实例分析
Feb 20 jQuery
jQuery事件blur()方法的使用实例讲解
Mar 30 jQuery
jQuery实现图片随机切换、抽奖功能(实例代码)
Oct 23 jQuery
Jquery 获取相同NAME 或者id删除行操作
Aug 24 jQuery
为jquery的ajax请求添加超时timeout时间的操作方法
Sep 04 #jQuery
vue-cli 引入jQuery,Bootstrap,popper的方法
Sep 03 #jQuery
详解jQuery中的easyui
Sep 02 #jQuery
JS与jQuery判断文本框还剩多少字符可以输入的方法
Sep 01 #jQuery
jQuery解析json格式数据示例
Sep 01 #jQuery
jQuery实现表格隔行换色
Sep 01 #jQuery
基于jQuery ztree实现表格风格的树状结构
Aug 31 #jQuery
You might like
解析php5配置使用pdo
2013/07/03 PHP
PHP中的traits简单使用实例
2015/05/13 PHP
开发跨浏览器javascript常见注意事项
2009/01/01 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
详细分析单线程JS执行问题
2017/11/22 Javascript
关于ES6箭头函数中的this问题
2018/02/27 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
详解如何运行vue项目
2019/04/15 Javascript
JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例
2019/05/17 Javascript
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
进一步探究Python中的正则表达式
2015/04/28 Python
python组合无重复三位数的实例
2018/11/13 Python
Python读取stdin方法实例
2019/05/24 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
新手学python应该下哪个版本
2020/06/11 Python
python 实现两个npy档案合并
2020/07/01 Python
如何用python批量调整视频声音
2020/12/22 Python
倡议书范文
2014/04/16 职场文书
给学校的建议书范文
2014/05/15 职场文书
国庆节演讲稿
2014/05/27 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
借条格式范本
2015/05/25 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
python关于集合的知识案例详解
2021/05/30 Python