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请求struts action实现异步刷新
Apr 19 jQuery
解决jQuery ajax动态新增节点无法触发点击事件的问题
May 24 jQuery
Jquery EasyUI $.Parser
Jun 02 jQuery
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
Jul 22 jQuery
vue单页应用中如何使用jquery的方法示例
Jul 27 jQuery
jQuery dateRangePicker插件使用方法详解
Jul 28 jQuery
jQuery选择器之属性过滤选择器详解
Sep 28 jQuery
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
Jan 18 jQuery
使用jQuery给Table动态增加行、清空table的方法
Sep 05 jQuery
jQuery实现ajax的嵌套请求案例分析
Feb 16 jQuery
jQuery实现可以扩展的日历
Dec 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
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
基于php-fpm 参数的深入理解
2013/06/03 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
Prototype使用指南之enumerable.js
2007/01/10 Javascript
jQuery表格列宽可拖拽改变且兼容firfox
2014/09/03 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
基于JavaScript实现右键菜单和拖拽功能
2016/11/28 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
python生成验证码图片代码分享
2016/01/28 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
2016/09/18 Python
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
详解flask入门模板引擎
2018/07/18 Python
Python实现压缩文件夹与解压缩zip文件的方法
2018/09/01 Python
解决python xlrd无法读取excel文件的问题
2018/12/25 Python
python opencv捕获摄像头并显示内容的实现
2019/07/11 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
史上最详细的Python打包成exe文件教程
2021/01/17 Python
德国大型的家具商店:Pharao24.de
2016/10/02 全球购物
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
环境工程专业自荐信
2014/03/03 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
安全协议书范本
2014/04/21 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
公司备用金管理制度
2015/08/04 职场文书
详解Python类和对象内容
2021/06/22 Python
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python