将jquery序列化转成对象的编码坑
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将jquery序列化转成对象的编码坑相关的知识,希望对你有一定的参考价值。
主要的两个坑:
- jquery的 serialize()时会将空格转义成+,字符转成对象时把+号转成空格
例如:
<input type="text" value="12 34+56" />
那么在执行 serialize()方法后,得到的却是 12+34%2B56 这样的字符串;
即jquery的序列化方法对空格进行了转义,转换成了 + 号,“+”号转义的是 %2B
2. 一直以为序列化字符串中key编码没啥用,key一定要编码,若key不编码如下情况会出现问题
<input type="text" name="goodsList[0].storeNum" />
最终将jquery序列化字符串转成对象的方法如下
1 serializeObj: function(paramStrs){
2 if(!paramStrs){
3 return {};
4 }
5
6 // jquery序列化传入的字符串,将+号转成空格
7 paramStrs = paramStrs.replace(/\+/gi, ‘ ‘);
8
9 var arr = paramStrs.split(‘&‘),
10 returnObj = {},
11 name = ‘‘,
12 value = ‘‘,
13 temp = null;
14 for(var i=0; i< arr.length; i++){
15 temp = arr[i].split(‘=‘);
16 name = decodeURIComponent(temp[0]);
17 value = decodeURIComponent(temp[1]);
18
19 if(!returnObj.hasOwnProperty(name)){
20 returnObj[name] = value;
21 }else{
22 if($.isArray(returnObj[name])){
23 returnObj[name].push(value);
24 }else{
25 var tempArr = [returnObj[name]];
26 tempArr.push(value);
27 returnObj[name] = tempArr;
28 }
29 }
30 }
31
32 return returnObj;
33 }
以上是关于将jquery序列化转成对象的编码坑的主要内容,如果未能解决你的问题,请参考以下文章
jquery 对象的 heightinnerHeightouterHeight 的区别以及DOM 元素的 clientHeightoffsetHeightscrollHeightoffset(代码片段