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插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
Mar 22 jQuery
jQuery设置图片等比例缩小的方法
Apr 29 jQuery
jquery tmpl模板(实例讲解)
Sep 02 jQuery
jquery实现用户登陆界面(示例讲解)
Sep 06 jQuery
jquery实现倒计时小应用
Sep 19 jQuery
zTree jQuery 树插件的使用(实例讲解)
Sep 25 jQuery
jquery分页插件pagination使用教程
Oct 23 jQuery
jQuery实现侧边栏隐藏与显示的方法详解
Dec 22 jQuery
jquery 验证用户名是否重复代码实例
May 14 jQuery
jQuery 实现DOM元素拖拽交换位置的实例代码
Jul 14 jQuery
jQuery实现回到顶部效果
Oct 19 jQuery
jQuery实现简单弹幕制作
Dec 10 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分页代码实例
2013/10/24 PHP
PHP实现的迷你漂流瓶
2015/07/29 PHP
js replace正则表达式应用案例讲解
2013/01/17 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
用正则表达式替换图片地址img标签
2013/11/22 Javascript
jquery使用on绑定a标签无效 只能用live解决
2016/06/02 Javascript
Bootstrap选项卡与Masonry插件的完美结合
2016/07/06 Javascript
原生JS实现九宫格抽奖效果
2017/04/01 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
jQuery实现的点击图片居中放大缩小功能示例
2019/01/16 jQuery
angular4+百分比进度显示插件用法示例
2019/05/05 Javascript
[03:35]2018年度DOTA2最佳辅助位选手5号位-完美盛典
2018/12/17 DOTA
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
Python变量类型知识点总结
2019/02/18 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
Python 写入训练日志文件并控制台输出解析
2019/08/13 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
python脚本定时发送邮件
2020/12/22 Python
DJI大疆德国官方商城:大疆无人机
2018/09/01 全球购物
JSF的标签库有哪些
2012/04/27 面试题
面试后的英文感谢信
2014/02/01 职场文书
创先争优活动方案
2014/02/12 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
会计系毕业求职信
2014/08/07 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
商务宴请邀请函范文
2015/02/02 职场文书
复试通知单模板
2015/04/24 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby