今天来总结一下获取url中参数的值,比如 http://blog.youkuaiyun.com/amberwu?viewmode=contents 这个链接后面跟一个参数 viewmode ,其对应的值是contents 。
/**
* 获取URL查询字符串query中参数的值
* @param {[String]} key [要查询的参数名]
* @param {[String]} href [url或者url查询字符串(推荐)]
* @return {[String]} [参数值]
*/
var getQueryValue = function(key, href) {
href = href || window.location.search;
var match = href.match(new RegExp('[?&]' + key + '=([^&]*)'));
return match && match[1] && decodeURIComponent(match[1]) || '';
};
那么接下来获取参数就可以这样写:
// 获取参数viewmode var viewmode= getQueryValue('viewmode');
得到的结果如图:
But
如果我们这个链接是某个参数有多个值,比如:
http://blog.youkuaiyun.com/amberwu?viewmode=contents&viewmode=content2 这个链接后面跟一个参数 viewmode ,但其对应的值有俩,是contents 和content1
这样如果我们继续再用上面的
getQueryValue
则会出现这样的问题:
所以我们重新写一个函数:
/**
* 获取URL查询字符串query中参数的值
* @param {[String]} key [要查询的参数名]
* @param {[String]} href [url或者url查询字符串(推荐)]
* @return {[String]} 匹配不到undefine,匹配到一个String,匹配到多个Array
*/
var getQueryValue2 = function(key, href) {
var reg = new RegExp('[?&]' + key + '=([^&]*)', 'g');
var match = (href || window.location.search).match(reg);
if (!match) return;
if (match.length === 1) return decodeURIComponent(match[0].replace(reg, '$1'));
match = match.map(function(item) {
return decodeURIComponent(item.replace(reg, '$1'));
});
return match;
};
// 获取参数
viewmode
var
viewmode
= getQueryValue2('viewmode');
这样得到的结果变成了数组而不是字符串,可以根据需要去转换类型。
好了~欢迎补充和改正。