js将json格式的对象拼接成复杂的url参数方法。
var parseParam=function(param, key){
varparamStr="";
if(paraminstanceof String||param instanceof Number||param instanceof Boolean){
paramStr+="&"+key+"="+encodeURIComponent(param);
}else{
$.each(param,function(i){
vark=key==null?i:key+(paraminstanceof Array?"["+i+"]":"."+i);
paramStr+='&'+parseParam(this, k);
});
}
returnparamStr.substr(1);
};
//调用:
var obj={name:'tom','class':{className:'class1'},classMates:[{name:'lily'}]};
parseParam(obj);
// 结果:"name=tom&class.className=class1&classMates[0].name=lily"
parseParam(obj,'stu');
// 结果:"stu.name=tom&stu.class.className=class1&stu.classMates[0].name=lily"
// 将string 转换成json对象
var define = "{name: 'Michael ',email: '17bity@gmail.com '} ";
var data = eval( '( ' + define + ') ');
alert(data.name);
将URL截取转换成json
function getQueryObject(url) {
url = url == null ? window.location.href : url;
var search = url.substring(url.lastIndexOf("?") + 1);
var obj = {};
var reg = /([^?&=]+)=([^?&=]*)/g;
search.replace(reg, function (rs, $1, $2) {
var name = decodeURIComponent($1);
var val = decodeURIComponent($2);
val = String(val);
obj[name] = val;
return rs;
});
return obj;
}
首先将字符串进行分割以“?”为界限,我们在进行分割的时候要将得到的索引加一,不然那会把这个“?”也包含进去。
然后主要就是正则了。我们主要匹配的东西都是以query=name的形式存在,然后中间以&进行连接,name我们的value和一般定义为除“?、&、=”之外的其他任何字符,
+代表匹配一个或者多个,另个肯定是不行的;*代表0个或多个,这里value没有是允许的;这里需要注意的就是^在单独使用时,代表以什么开头,在中括号里面使用代表不包含的意思。正则基本就这么多了。
然后就是replace这个方法了,第一个岑姝就是要进行匹配的字符串,可以是字符串也可以是正则表达式,而后面可以是替换的字符,也可以是一个参数,其中rs表示匹配的字符串序列,$1,表示第一个()内所匹配的内容,$2为第二个,以此类推。当我们使用全局匹配时,只要匹配成功的字符串最后都会执行一遍function函数。
decadeURIComponent就是url字符转码。