js將json格式的對(duì)象拼接成復(fù)雜的url參數(shù)方法。
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);
};
//調(diào)用:
var obj={name:'tom','class':{className:'class1'},classMates:[{name:'lily'}]};
parseParam(obj);
// 結(jié)果:"name=tom&class.className=class1&classMates[0].name=lily"
parseParam(obj,'stu');
// 結(jié)果:"stu.name=tom&stu.class.className=class1&stu.classMates[0].name=lily"
// 將string 轉(zhuǎn)換成json對(duì)象
var define = "{name: 'Michael ',email: '17bity@gmail.com '} ";
var data = eval( '( ' + define + ') ');
alert(data.name);
將URL截取轉(zhuǎn)換成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;
}
首先將字符串進(jìn)行分割以“镜撩?”為界限预柒,我們?cè)谶M(jìn)行分割的時(shí)候要將得到的索引加一,不然那會(huì)把這個(gè)“?”也包含進(jìn)去。
然后主要就是正則了宜鸯。我們主要匹配的東西都是以query=name的形式存在憔古,然后中間以&進(jìn)行連接,name我們的value和一般定義為除“淋袖?鸿市、&、=”之外的其他任何字符即碗,
+代表匹配一個(gè)或者多個(gè)焰情,另個(gè)肯定是不行的;*代表0個(gè)或多個(gè)剥懒,這里value沒(méi)有是允許的内舟;這里需要注意的就是^在單獨(dú)使用時(shí),代表以什么開(kāi)頭蕊肥,在中括號(hào)里面使用代表不包含的意思谒获。正則基本就這么多了。
然后就是replace這個(gè)方法了壁却,第一個(gè)岑姝就是要進(jìn)行匹配的字符串批狱,可以是字符串也可以是正則表達(dá)式,而后面可以是替換的字符展东,也可以是一個(gè)參數(shù)赔硫,其中rs表示匹配的字符串序列,$1盐肃,表示第一個(gè)()內(nèi)所匹配的內(nèi)容爪膊,$2為第二個(gè),以此類(lèi)推砸王。當(dāng)我們使用全局匹配時(shí)推盛,只要匹配成功的字符串最后都會(huì)執(zhí)行一遍function函數(shù)。
decadeURIComponent就是url字符轉(zhuǎn)碼谦铃。