function getParamFromUrl(url, name){
var params = url.split('?'),
val = '';
if( params.length < 2 ) return '';
var search = params[1].split('&');
for(var i = 0, len = search.length; i < len; i++ ){
var ss = search[i].split('=');
if( name === ss[0] ) {
val = ss[1];
break;
}
}
return val;
}
function GetRequest() {
var url = location.search;
var theRequest = new Object()
if (url.indexOf("?") != -1) {
var str = url.substr(1)
if (str.indexOf("&") != -1) {
var strs = str.split("&")
for (var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1])
}
} else {
theRequest[str.split("=")[0]] = unescape(str.split("=")[1])
}
}
return theRequest
}
urlParams: function(url) { //传入的参数为window.location
var urlParamsList = {};
var params = url.search.replace(/^\?/, "").split('&');
// var params = url.split("?")[1].split("&") 这里是当url是window.location.href时候
for (var i = 0; i < params.length; i++) {
var param = params[i];
var temp = param.split("=");
urlParamsList[temp[0]] = decodeURI(temp[1]);
}
return urlParamsList;
}
就你提供的两种方法 。 个人观点, 就大工程的 话, 我会选择方法一, 小工程我会选择方法二, 方法一进行封装,我可以丢到jqurey 中, 但是方法二 则不行,绑定了两个全局对象,灵活性太差。 但是 方法一 有个弊端或者说是优点, 既 我需要什么我就传什么, 不需要丢给我 多余的 参数,这样的效果在 url 参数非常多的时候 效果会非常明显 ,灵活性更佳 ,但是方法二 是可以获得所有参数和所有值。
正则没有深入,不过还是要能读懂简单的。遇到复杂的,也可以使用诸如 replace, split 之类拆解为简单的来处理。这一块其他同学注释得很清楚了。
题主问题的另一个思路:
URL 解析,完全可以使用 window.location 对象(如 search, host 等属性)以及 字符串的 replace(), split() 方法以及一些关键字符如 + / = ? 分步拆解出来。
下面是之前写的一个比较单一功能的,贴一下哈:
有个叫qs的node库,可以直接把请求字符串解析成对象,也可以反过来用来把对象转成请求参数
使用这个理解更清晰一点 ,我的就叫方法四吧
var lib = {
// var params = url.split("?")[1].split("&") 这里是当url是window.location.href时候
}
用法:selfUserID = lib.urlParams(window.location)['userID']