该功能已经在 ez.js 更好的实现,本文的方法依旧可用,但将不再更新。
ez.js 提供了一些常用的 js 方法。
支持以下几种传参的形式:
使用井号#:
http://x.x.com/x.html#id=1&name=Mukti
使用问号?:
http://x.x.com/x.html?id=1&name=Mukti
使用井号#并且不需要参数名直接带参数用中横线分隔:
http://x.x.com/x.html#1-Mukti-参数3-参数4
使用井号#并且不需要参数名直接带参数用左斜杠分隔:
http://x.x.com/x.html#1/Mukti/参数3/参数4
同时使用井号#和问号?:
http://x.x.com/x.html#id=1&name=Mukti?type=test&page=1
http://x.x.com/x.html#1-Mukti?type=test&page=1
下面是函数代码:
[code lang=”javascript”]
function getUrlParam(a,b,z){
/*
url = http://xxx.xxx.com/x.html#id-test?id=1&test=2
x.html#?
英文问号,均为空。
“#”在“?”前面才有效,否则只取到“#”
*/
if(window.location.href.indexOf("#") < 0 && window.location.href.indexOf("?") < 0){ window[a] = window[b] = {}; return; } var x = {}, y = {}; // 如果“#”后面有内容,那么按“?”分开,否则h[0] = ”, h[1] = ” var h = window.location.href.split("#")[1] ? window.location.href.split("#")[1].split("?") : [null, window.location.href.split("#")[0].split("?")[1]]; var n = h[1] ? h[1].split("&") : ""; if(h[0] && h[0].indexOf("=") > 0){
var m = h[0].split("&");
for(var i=0;i
var l = m[i].split("=");
x[l[0]] = l[1];
}
}else{
var m = h[0] ? h[0].split(z) : ”;
for(var i=0;i
x[i] = m[i];
}
}
for(var i=0;i
var l = n[i].split("=");
y[l[0]] = l[1];
}
window[a] = x;
window[b] = y;
}
[/code]
使用方法:
getUrlParam()接受三个参数:
第一个参数假设我们传的是G,那么会将井号#后面的参数赋值给对象G(注意这个G将会是window全局对象,大家不要出现命名冲突),比如url中#id=1&name=Mukti,那么我们就可以通过G[‘id’]或者G.id来取得id的值,同理,用G.name取得name的值。
第二个参数假设我们传的是P,那么会取得?后面的参数,比如url中?id=1&name=Mukti,我们可以使用P.id取得id的值。
第三个参数是井号#后面参数省略了参数名的时候使用什么样的分隔符。比如url中#1-Mukti-参数3,那么我们第三个参数就要使用中横线“-”,即getUrlParam(“G”,”P”,”-“),这样我们可以通过G[1],G[2],G[3],分别取得1,Mukti,参数3这三个值。通用你可以使用任意没有歧义的分隔符,比如“|”,url是这样:#1|Mukti|param3,函数参数就要这么写:getUrlParam(“G”,”P”,”|”)。没有歧义,也就是说最好不要用“&”。
但是请注意:问号?后面是不能使用省略参数名的形式,比如?1/Mukti/param3,这样是错误的。