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 进入页面默认给已赋值的复选框打钩
Mar 23 jQuery
jQuery中的deferred使用方法
Mar 27 jQuery
jQuery实现简单的抽奖游戏
May 05 jQuery
JQuery实现定时刷新功能代码
May 09 jQuery
jQuery简介_动力节点Java学院整理
Jul 04 jQuery
jQuery实现广告条滚动效果
Aug 22 jQuery
jquery实现倒计时小应用
Sep 19 jQuery
jQuery中内容过滤器简单用法示例
Mar 31 jQuery
通过jquery toggleClass()属性制作文章段落更改背景颜色
May 21 jQuery
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
Aug 09 jQuery
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
Oct 26 jQuery
jQuery实现的老虎机跑动效果示例
Dec 29 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删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
百度ping方法使用示例 自动ping百度
2014/01/26 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
php实现zip文件解压操作
2015/11/03 PHP
php简单创建zip压缩文件的方法
2016/04/30 PHP
php英文单词统计器
2016/06/23 PHP
php Session无效分析资料整理
2016/11/29 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
2014/09/29 Javascript
js基础知识(公有方法、私有方法、特权方法)
2015/11/06 Javascript
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
2018/01/08 jQuery
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
vue  自定义组件实现通讯录功能
2018/09/30 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
微信小程序封装的HTTP请求示例【附升级版】
2019/05/11 Javascript
详解小程序开发经验:多页面数据同步
2019/05/18 Javascript
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
通过python-pptx模块操作ppt文件的方法
2020/12/26 Python
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
AJAX应用和传统Web应用有什么不同
2013/08/24 面试题
护理专业本科生自荐信
2013/10/01 职场文书
医学类导师推荐信范文
2013/11/19 职场文书
会计与出纳自荐书范文
2014/03/16 职场文书
平安建设工作方案
2014/06/02 职场文书
总经理助理岗位职责范本
2014/07/20 职场文书
顶岗实习协议书
2015/01/29 职场文书
2015年文员个人工作总结
2015/04/09 职场文书
高考1977观后感
2015/06/04 职场文书
唐山大地震的观后感
2015/06/05 职场文书
教师反邪教心得体会
2016/01/15 职场文书
python spilt()分隔字符串的实现示例
2021/05/21 Python