Kothing
Author of Kothing, a Bootstrap Medium styled template available for WordPress, HTML, Ghost and Jekyll. You are currently previewing Jekyll template demo.

JavaScript获取Url参数万能方法

url中的参数是指?之后的参数,如今的url中经常会带有#的场景:http://test.com/path1/?id=123#/path2/path3,如果参数是在#号之前(也就是?id=123#/path/path之前),此时可以使用window.location.search的。

但是?号参数是在#号之后,使用window.location.search是获取不到参数的,比如:http://test.com/path1/##/?id=123,此时应该使用window.location.hash

因此兼容各种场景的获取参数方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function getUrlParam(name) {
  if (typeof name !== 'string') {
    return null;
  }
  const $search = window.location.search;
  const $hash = window.location.hash;
  const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
  let r = null;
  if ($search !== '') {
    r = $search.substr(1).match(reg);
  }
  if ($hash !== '' && r === null) {
    if ($hash.indexOf('?') > 0) {
      r = $hash.split("?")[1].match(reg);
    }
    if ($hash.indexOf('?') < 0 && $hash.indexOf('&') > 0) {
      r = $hash.substr($hash.indexOf('&')).match(reg);;
    }
  }
  return r !== null ? unescape(r[2]) : null;
}