jQuery客户端表单数据获取

  jq在进行客户端表单数据获取我们通常用serialize或者是serizlizeArray(),两种方法,可是在serizlizeArray()返回的数据是一个数组,数组里分别对应的是每个对象,如下

[{
name: 'sex', //表单name值
value: '男' //表单value值
},
{
name: 'age', //表单name值
value: '' //表单value值
}]

但是这有时候会满足不了我们的需求,有时候我们需要分组的时候,我们可以根据name值的命名来进行分组多维,例如

<form id="test_form">
面板分类:<select name="面板分类"><option value="开关">开关</option><option value="插座">插座</option></select>
子项分类:<select name="子项分类-开关"><option value="单控开关">单控开关</option><option value="双控开关">双控开关</option></select>
子项分类:<select name="子项分类-插座"><option value="三孔插座">三孔插座</option><option value="五孔插座">五孔插座</option></select>
</form>

用我写的函数就可以实现如下结果

{
面板分类:"开关"
子项分类:{
开关:"单控开关",
插座:"五孔插座"
}
}

示例2:

<form action="" id="test_form3">
<input type="text" name="吊杆-规格" value="ø6">
<input type="text" name="吊杆-间距" value="">
<input type="text" name="吊杆-天宫库" value="data:JAHSHDJKAHDJFAS">
<input type="checkbox" checked="checked" name="主龙骨-值" value="true">
<input type="text" name="主龙骨-间距" value="">
</form>

返回

{
吊杆:{
规格:"ø6",
间距:"",
天宫库:"data:JAHSHDJKAHDJFAS"
},
主龙骨:{
值:"true",
间距:""
}
}

方法如下,第一个参数是表单id,第二个是是否返回json数据,第三个处理完的回调函数

/**
* --- 表单数据接收格式化 ---
* @param1 form_id* 表单id
* @param2 boolean false 是否返回json数据,默认为false
* @param3 callback 回调函数,参数是返回的obj||json, 处理完数据调用自定义方法
* @return obj||json
*/
var customSerialize = function(form, json, callback) {
var arr = $('#' + form).serializeArray();
var tmp = {};
var res2 = {};
//处理array
$.each(arr, function(k, v) {
tmp[v.name] = v.value;
});
$.each(tmp, function(k, v) {
res2[k] = v;
});
$.each(res2, function(k, v) {
var path = k.split('-');
var k2 = path.pop();
var next_node = res2;
$.each(path, function(k2, node) {
if (!next_node[node]) next_node[node] = {};
next_node = next_node[node];
});
next_node[k2] = v;
});
if (arguments[] && arguments[] == true) {
var json = JSON.stringify(res2);
if (callback) callback(json);
return json;
} else {
if (callback) callback(res2);
return res2;
}
}

用途

   在一些不用服务器需要跟js进行交互的环境中,如 ruby for sketchup 对于数据的传递非常有效

jQuery serializeArray()方法改写多维对象以及自定义的更多相关文章

  1. jQuery中serializeArray方法的使用及对象与字符串的转换

    使用jQuery中的serializeArray()方法可以方便的将表单中的各个信息,转化为多个{name:xx,value:xx}对象的数组, 再使用遍历的方式可以方便的将数组转化为json对象, ...

  2. jquery serializeArray() 方法通过序列化表单值来创建对象数组(名称和值)。

    serializeArray() 方法序列化表单元素(类似 .serialize() 方法),返回 JSON 数据结构数据. html代码: <form> <div><i ...

  3. [Web 前端 ] Jquery attr()方法 获取或修改 对象的属性值

    cp from : https://blog.csdn.net/gf771115/article/details/18086707 jquery中用attr()方法来获取和设置元素属性,attr是at ...

  4. jquery的方法总结

    1.1.概述随着WEB2.0及ajax思想在互联网上的快速发展传播,陆续出现了一些优秀的Js框架,其中比较著名的有Prototype.YUI.jQuery.mootools.Bindows以及国内的J ...

  5. jQuery的序列化元素 serialize()方法 serializeArray()方法 param()方法

    当提交的表单元素较多时用serialize()方法,serialize()方法也是作用于一个jQuery的对象,它能够将DOM元素内容序列化为字符串,用于Ajax请求. serialize() 方法通 ...

  6. jquery扩展方法(表单数据格式化为json对象)

    1.jquery扩展方法(表单数据格式化为json对象) <script type="text/javascript"> // 将表单数据序列化为一个json对象,例如 ...

  7. jQuery中的$.extend方法来扩展JSON对象及合并,方便调用对象方法

    $.extend方法可以扩展JSON对象,用一个或多个其他对象来扩展一个对象,返回被扩展的对象. 例一 合并 settings 和 options,修改并返回 settings var setting ...

  8. jQuery回调、递延对象总结(下篇) —— 解密jQuery.when方法

    前言: 前一篇文章中重点总结了一下then方法,它主要用来处理多个异步任务按顺序执行,即前一个任务处理完了,再继续下一个,以此类推: 而这一章节jQuery.when方法也是处理多个异步任务,它把多个 ...

  9. jquery数组内多维对象

    jquery数组内多维对象 var postData=[],obj,list; obj = !!obj ? obj : $('#dist_meici_checkinfo_form'); obj.fin ...

随机推荐

  1. CSS实现两端对齐效果

    CSS实现两端对齐效果 两端对齐,从概念上来说,其实不难理解.如果不明白什么叫两端对齐,可以玩玩word等办公软件. 下面谈谈如何实现文本的两端对齐.我所知道的大概有以下几种方法 text-align ...

  2. PHP设计模式:抽象工厂

    示例代码详见https://github.com/52fhy/design_patterns 抽象工厂 抽象工厂(Abstract Factory)是应对产品族概念的.比如说,每个汽车公司可能要同时生 ...

  3. Java 基础 程序流程控制 (下)

    Java 程序流程控制 (下) 此篇单独对循环结构的知识点进行整理: 之前讲到循环结构分为:for循环,while循环,do...while循环三种最基本的循环结构:在JDK1.5以后的版本还提供了f ...

  4. workerman例子无法工作

    现象 workerman已经正常启动,但是按照官网写的例子或者下载的demo无法工作,例如页面打不开,socket连接失败等 解决方法 一般这种workerman启动没报错,但是无法打开页面或者无法连 ...

  5. php 函数形参前面加上&

    <?php function test(&$a){ $a=$a+100; } $b=1; echo $b;//输出1 test($b);//这里$b传递给函数的其实是$b的变量内容所处的 ...

  6. apache 基本vhost配置

    经常使用Apache虚拟主机进行开发和测试,但每次需要配置虚拟主机时都习惯性的ctrl+c和ctrl+v,这次由于重装系统,需要配置一个新的PHP开发环境虚拟主机,于是总结一下Apaceh配置http ...

  7. Sublime text3插件安装方法

    一.安装sublime text3插件的方法: 1.Ctrl+~键,调出console,将下面代码复制到底部命令行,回车: import urllib.request,os; pf = 'Packag ...

  8. 【操作教程】SequoiaDB分布式存储教程

    1.各模式适用场景介绍 由于SequoiaDB对比其他的NoSQL有更多的方式将数据分布到多台服务器上,所以下面笔者为阅读者一一介绍每种分布式方式适合于哪种场景. 1.1 Hash 方式分布数据 在H ...

  9. 处理浏览器兼容 各个浏览器的标识 hack

    Firefox 浏览器 @-moz-document url-prefix() { .selector { property: value; } } 支持所有Gecko内核的浏览器 (包括Firefo ...

  10. Python爬虫小白---(二)爬虫基础--Selenium PhantomJS

    一.前言   前段时间尝试爬取了网易云音乐的歌曲,这次打算爬取QQ音乐的歌曲信息.网易云音乐歌曲列表是通过iframe展示的,可以借助Selenium获取到iframe的页面元素, 而QQ音乐采用的是 ...