jQuery扩展方法实现Form表单与Json互相转换的实例代码

 更新时间:2018年09月05日 09:39:32   作者:ElderJames  
本文通过实例代码给大家介绍了jQuery扩展方法实现Form表单与Json互相转换的相关知识,并给大家介绍了jquery两种扩展方法,需要的朋友可以参考下

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的商品展示放大镜

    这两天帮朋友的网站做个放大镜,就是淘宝上的那种,两个框,一个框放小图,另外一个框放大图。本来说想从网上直接载一个拿来Hack,但是找好半天都没有找到,看了看JQ的插件也好像不对,干脆就自己写了。
    2010-08-08
  • jQuery each和js forEach用法比较

    jQuery each和js forEach用法比较

    这篇文章主要介绍了jQuery each和js forEach用法,结合实例形式对比分析了jQuery each和js forEach具体使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-02-02
  • jQuery获取DOM节点实例分析(2种方式)

    jQuery获取DOM节点实例分析(2种方式)

    这篇文章主要介绍了jQuery获取DOM节点的方法,提供了两种jQuery获取DOM节点的技巧,需要的朋友可以参考下
    2015-12-12
  • jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】

    jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】

    这篇文章主要介绍了jQuery实现导航滚动到指定内容效果,结合完整实例形式分析了页面元素属性动态变换操作相关技巧,涉及jQuery插件jquery.scrollto.js的使用,并附带demo源码下载供读者下载参考,需要的朋友可以参考下
    2016-09-09
  • jQuery获取cookie值及删除cookie用法实例

    jQuery获取cookie值及删除cookie用法实例

    这篇文章主要介绍了jQuery获取cookie值及删除cookie用法,实例分析了jQuery操作cookie时域和路径的作用,以及针对cookie的读取与删除技巧,需要的朋友可以参考下
    2016-04-04
  • jquery图片滚动放大代码分享(1)

    jquery图片滚动放大代码分享(1)

    这篇文章主要介绍了jquery图片滚动放大效果,功能实现非常简单,推荐给大家,有需要的小伙伴可以参考下。
    2015-08-08
  • jquery的checkbox,radio,select等方法小结

    jquery的checkbox,radio,select等方法小结

    jquery的checkbox,radio,和select是jquery操作的一个难点和重点,很多前端新手对其了解不是很透彻。时间久了不用,我在写的时候有时也难免对某些操作支支吾吾,记不清楚,现在,对其做一些简单的总结
    2016-08-08
  • jQuery实现两列等高并自适应高度

    jQuery实现两列等高并自适应高度

    想要使用jQuery实现两列等高并自适应高度,其实也很简单,原理就是取得左右两边的高度,然后判断这个值,把大的值赋给小的就行了。下面就跟小编一起来看下吧
    2016-12-12
  • JQuery表单验证插件EasyValidator用法分析

    JQuery表单验证插件EasyValidator用法分析

    这篇文章主要介绍了JQuery表单验证插件EasyValidator用法,以实例形式系统分析了EasyValidator的功能特性及具体用法,是非常实用的jQuery插件,需要的朋友可以参考下
    2014-11-11
  • Jquery常用技巧收集整理篇

    Jquery常用技巧收集整理篇

    jQuery 1.4给开发者带来了很多值得兴奋的新特性,同时使用jQuery的人也越来越多,为了方便大家对jQuery的使用,下面列出了一些jQuery使用技巧。
    2010-11-11

最新评论