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实现百度登录框的动态切换效果
Apr 21 jQuery
jquery dataTable 后台加载数据并分页实例代码
Jun 07 jQuery
Vue.js列表渲染绑定jQuery插件的正确姿势
Jun 29 jQuery
jquery拖动改变div大小
Jul 04 jQuery
jQuery实现的简单无刷新评论功能示例
Nov 08 jQuery
jQuery中库的引用方法
Jan 06 jQuery
jquery 给动态生成的标签绑定事件的几种方法总结
Feb 24 jQuery
jQuery创建及操作xml格式数据示例
May 26 jQuery
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
Dec 11 jQuery
jQuery内容选择器与表单选择器实例分析
Jun 28 jQuery
jquery实现自定义树形表格的方法【自定义树形结构table】
Jul 12 jQuery
JS JQuery获取data-*属性值方法解析
Sep 01 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
PHP中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
PHP在字符断点处截断文字的实现代码
2011/04/21 PHP
php字符串过滤与替换小结
2015/01/26 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
JS字符串函数扩展代码
2011/09/13 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
2015/09/24 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
Javascript数组中push方法用法分析
2016/10/31 Javascript
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
图解javascript作用域链
2019/05/27 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
Python lambda和Python def区别分析
2014/11/30 Python
Python SQLite3简介
2018/02/22 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
植物选择:Botanic Choice
2017/02/15 全球购物
eBay德国站:eBay.de
2017/09/14 全球购物
英国健身专家:WIT Fitness
2021/02/09 全球购物
linux面试题参考答案(2)
2015/12/06 面试题
80后职场人的职业生涯规划
2014/03/08 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书
2019年二手房买卖合同范本
2019/10/14 职场文书