获取url中某参数的值

时间:2022-10-22 13:48:24


好久没有更新博客了,最近迷上了手账,一个很少女心的东西,总觉得想要学习的东西有很多,一起加油吧~

今天来总结一下获取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');


得到的结果如图:

获取url中某参数的值

But
如果我们这个链接是某个参数有多个值,比如: http://blog.csdn.net/amberwu?viewmode=contents&viewmode=content2  这个链接后面跟一个参数 viewmode ,但其对应的值有俩,是contents 和content1 

这样如果我们继续再用上面的 getQueryValue

则会出现这样的问题:

获取url中某参数的值

所以我们重新写一个函数:


/**
 * 获取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');

获取url中某参数的值

这样得到的结果变成了数组而不是字符串,可以根据需要去转换类型。


好了~欢迎补充和改正。