今天来总结一下获取url中参数的值,比如 http://blog.csdn.net/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.csdn.net/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');
这样得到的结果变成了数组而不是字符串,可以根据需要去转换类型。
好了~欢迎补充和改正。