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 28 jQuery
jQuery复合事件用法示例
Jun 10 jQuery
jquery拖动改变div大小
Jul 04 jQuery
使用jQuery实现页面定时弹出广告效果
Aug 24 jQuery
jQuery选择器之属性筛选选择器用法详解
Sep 19 jQuery
jquery ztree实现右键收藏功能
Nov 20 jQuery
jquery animate动画持续运动的实例
Nov 29 jQuery
通过jquery的ajax请求本地的json文件方法
Aug 08 jQuery
高效jQuery选择器的5个技巧实例分析
Nov 26 jQuery
jQuery实现移动端笔触canvas电子签名
May 21 jQuery
Jquery ajax书写方法代码实例解析
Jun 12 jQuery
jQuery+ajax实现用户登录验证
Sep 13 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
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
php上传文件常见问题总结
2015/02/03 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
php判断IP地址是否在多个IP段内
2020/08/18 PHP
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
javascript在myeclipse中报错的解决方法
2013/10/29 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
JS实现图片无间断滚动代码汇总
2014/07/30 Javascript
教你用javascript实现随机标签云效果_附代码
2016/03/16 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
2017/11/14 jQuery
了解JavaScript表单操作和表单域
2019/05/27 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
vue实现放大镜效果
2020/09/17 Javascript
python实现分析apache和nginx日志文件并输出访客ip列表的方法
2015/04/04 Python
python开发之list操作实例分析
2016/02/22 Python
python xml解析实例详解
2016/11/14 Python
python使用turtle绘制分形树
2018/06/22 Python
python re正则匹配网页中图片url地址的方法
2018/12/20 Python
解决pycharm回车之后不能换行或不能缩进的问题
2019/01/16 Python
django将数组传递给前台模板的方法
2019/08/06 Python
Python如何实现在字符串里嵌入双引号或者单引号
2020/03/02 Python
Python Opencv轮廓常用操作代码实例解析
2020/09/01 Python
2014购房个人委托书范本
2014/10/12 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
2015年团支部工作总结
2015/04/03 职场文书
新入职员工工作总结
2015/10/15 职场文书
nginx 添加http_stub_status_module模块
2022/05/25 Servers
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技