原生JS获取URL链接参数的几种常见方法

前言

作为一个前端开发,我们很多时候都需要对URL进行操作和处理,最常见的一种就是获取URL链接中携带的参数值了。使用框架开发的小伙伴可能会觉得这很简单,因为框架提供了很多方法让我们方便的获取URL链接携带的参数。但是有些时候我们不能依赖框架,需要我们使用原生JS去获取参数,这也是面试中经常遇到的一道题。今天我们就手撕代码,利用原生JS去获取URL链接参数值。

1. 获取方式总结

利用原生JS获取URL链接参数的方法也有好几种,今天我们依次来讲解常见的几种:

  • 通过正则匹配的方式
  • 利用a标签内置方法
  • 利用split方法分割法
  • 使用URLSearchParams方法

2. 具体实现方法

2.1 正则匹配法

这是非常中规中举的一种方法,重点是要求我们要懂正则表达式。

代码如下:

<script>
  // 利用正则表达式
  let url = "http://www.baidu.com?name=elephant&age=25&sex=male&num=100"
  // // 返回参数对象
  function queryURLParams(url) {
    let pattern = /(\w+)=(\w+)/ig; //定义正则表达式
    let parames = {}; // 定义参数对象
    url.replace(pattern, ($, $1, $2) => {
      parames[$1] = $2;
    });
    return parames;
  }
  console.log(queryURLParams(url))
</script>

上段代码中重点是正则表达式的定义以及replace方法的使用,其中$2分别代表name=elephant、name、elephant,以此类推。replace结合正则更加详细的使用方法可以自行下去学习。

实现效果:

2.2 利用a标签

这种方法较少人使用,因为毕竟有点黑科技的意思在里面。它的原理主要就是利用了a标签得到一些内置属性,如href、hash、search等属性。

代码如下:

<script>
  let URL = "http://www.baidu.com?name=elephant&age=25&sex=male&num=100#smallpig"
  function queryURLParams(url) {
    // 1.创建a标签
    let link = document.createElement('a');
    link.href = url;
    let searchUrl = link.search.substr(1); // 获取问号后面字符串
    let hashUrl = link.hash.substr(1); // 获取#后面的值
    let obj = {}; // 声明参数对象
    // 2.向对象中进行存储
    hashUrl ? obj['HASH'] = hashUrl : null; // #后面是否有值

    let list = searchUrl.split("&");
    for (let i = 0; i < list.length; i++) {
      let arr = list[i].split("=");
      obj[arr[0]] = arr[1];
    }
    return obj;
  }
  console.log(queryURLParams(URL))
</script>

上段代码中先创建了一个a标签,然后就可以根据a标签的属性分别得到url的各个部分了,这其实和Vue的路由跳转获取参数有点类似。

实现效果:

2.3 split分割法

该种方法利用了split可以以某个字符讲字符串分割为数组的特点,巧妙地将各个参数分割出来。

代码如下:

<script>
  let URL = "http://www.baidu.com?name=elephant&age=25&sex=male&num=100"
  function queryURLParams(URL) {
    // const url = location.search; // 项目中可直接通过search方法获取url中"?"符后的字串
    let url = URL.split("?")[1];
    let obj = {}; // 声明参数对象
    let arr = url.split("&"); // 以&符号分割为数组
    for (let i = 0; i < arr.length; i++) {
      let arrNew = arr[i].split("="); // 以"="分割为数组
      obj[arrNew[0]] = arrNew[1];
    }
    return obj;
  }
  console.log(queryURLParams(URL))
</script>

上传代码中如果在实际项目中,可以直接利用location.search获取“?”后面的字符串,这里为了方便演示,所以利用split分割了以下。

实现效果:

2.4 URLSearchParams方法

URLSearchParams方法能够让我们非常方便的获取URL参数,但是存在一定的兼容性问题,官网的解释如下:

URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串。

该接口提供了非常的的方法让我们来处理URL参数,这里我们只介绍如何获取URL参数值,更加详细的使用方法大家可以参考官网。

代码如下:

<script>
  let URL = "http://www.baidu.com?name=elephant&age=25&sex=male&num=100"
  function queryURLParams(URL) {
    let url = URL.split("?")[1];
    const urlSearchParams = new URLSearchParams(url);
    const params = Object.fromEntries(urlSearchParams.entries());
    return params
  }
  console.log(queryURLParams(URL))
</script>

这里我们基本上只用了两行主要代码就实现了参数的解析。需要注意的是urlSearchParams.entries()返回的是一个迭代协议iterator,所以我们需要利用Object.fromEntries()方法将把键值对列表转换为一个对象。

关于迭代协议,大家可以参考官网:迭代协议

实现效果:

兼容性:

可以看到我们这个接口不兼容万恶之源的IE。

附:获取URL携带参数实例

getUrlParamValue = function (name) {
if (name == null || name == 'undefined') {return null; }
var searchStr = decodeURI(location.search);
var infoIndex = searchStr.indexOf(name + "=");
if (infoIndex == -1) { return null; }
var searchInfo = searchStr.substring(infoIndex + name.length + 1);
var tagIndex = searchInfo.indexOf("&");
if (tagIndex!= -1) { searchInfo = searchInfo.substring(0, tagIndex); }
return searchInfo;
};

总结

这里介绍了四种方法来实现URL链接参数值的解析,其中使用最为广泛的应该当属split分割法。urlSearchParams 作为后起之秀,也逐渐被大家认可,也有很多方法让它兼容IE。

到此这篇关于原生JS获取URL链接参数的几种常见方法的文章就介绍到这了,更多相关JS获取URL参数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • js URL参数的拼接方法比较

    最常见的方式就是: 复制代码 代码如下: url?arg1=value1&arg2=value2&arg3=value3... 这样的方式最常见最普通也最容易理解,但是在项目中,如果后面带的参数可变而且字段有不同的值或者不同的语义时,这样的方式可维护性和可读性其实并不高,而且代码也容易重复或者冗余. 比如下面的一个对CGI的请求串: 复制代码 代码如下: var url = "http://www.tenpay.com/app/v1.0/juhui.cgi?"; var

  • JS获取URL中参数值(QueryString)的4种方法分享

    方法一:正则法 复制代码 代码如下: function getQueryString(name) {    var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');    var r = window.location.search.substr(1).match(reg);    if (r != null) {        return unescape(r[2]);    }    return null;}/

  • JS URL传中文参数引发的乱码问题

    解决方法如下: 1.在JS里对中文参数进行两次转码 复制代码 代码如下: var login_name = document.getElementById("loginname").value; login_name = encodeURI(login_name); login_name = encodeURI(login_name); 2.在服务器端对参数进行解码 复制代码 代码如下: String loginName = ParamUtil.getString(request, &

  • javascript[js]获取url参数的代码

    最近做个页面,需要用javascript获取url参数,可发现网上的东西,实在是多了,错误也实在是多啊,真晕,浪费了我不少时间于是,我便总结一下,一个好用的就可以了,先声明下,用正则,是简单,但多浏览器的兼容性,和速度不敢保证了,所以我就用个多浏览器兼容的 复制代码 代码如下: <script language = javascript> function request(paras){ var url = location.href;  var paraString = url.substr

  • JavaScript获取URL中参数querystring的方法详解

    一. 获取url的querystring参数 获取url的querystring参数的两种方法如下: 1.1 方法一:正则匹配 //获取url中的参数 function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", i); // 匹配目标参数 var result = window.location.search.substr(1).

  • js获取url参数值的两种方式

    方法一:正则分析法 复制代码 代码如下: function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return n

  • js修改地址栏URL参数解决url参数问题

    现在做网页,经常会碰到处理地址栏参数的问题,但一直是凭感觉做,之后漏洞百出也不知道从哪改起,因此,就专门做了一个修改地址栏参数的方法,这一下,就再也不用愁啦,哈哈! 以下就是我编的方法,使用很简单的哦: 复制代码 代码如下: function changeURLPar(destiny, par, par_value) { var pattern = par+'=([^&]*)'; var replaceText = par+'='+par_value; if (destiny.match(pat

  • 原生JS获取URL链接参数的几种常见方法

    前言 作为一个前端开发,我们很多时候都需要对URL进行操作和处理,最常见的一种就是获取URL链接中携带的参数值了.使用框架开发的小伙伴可能会觉得这很简单,因为框架提供了很多方法让我们方便的获取URL链接携带的参数.但是有些时候我们不能依赖框架,需要我们使用原生JS去获取参数,这也是面试中经常遇到的一道题.今天我们就手撕代码,利用原生JS去获取URL链接参数值. 1. 获取方式总结 利用原生JS获取URL链接参数的方法也有好几种,今天我们依次来讲解常见的几种: 通过正则匹配的方式 利用a标签内置方

  • JS获取url链接字符串 location.href

    js获取url链接字符串:location.href 可以对其进行截取,从而获取传送的参数,常用如下: location.href.indexOf("?")------获取?的index值. 注意:这里的location.href可不是指的现在地址栏里的地址,而是页面实际的地址. 另外,一些题外话: C#中获取字符所在位置的索引,也是用IndexOf来获取. sqlserver中获取索引,就不同了: 第一种: select * from dbo.users where CharInde

  • vue 获取url里参数的两种方法小结

    我就废话不多说了,大家还是直接看代码吧~ 第一种: const query = Qs.parse(location.search.substring(1)) let passport = query.passport; 第二种: var query=this.$route.query; let lat = query.lat; 补充知识:Vue通过query获取路由参数 现在来讲Vue通过query获取路由参数 可以看见com1组件里的路由参数为 name=zhangsan&job=teache

  • JS获取指定月份的天数两种实现方法

    最近看到一个有意思的试题,正好在需求中也碰到类似的问题,即计算某个月的天数问题.碰到类似问题也许大部分会想是不是还要判断闰年.平年,如果这样想的话就复杂了,下面给出具体的计算方法. 获取月份天数方法一: //传入年份和月份 获取该年对应月份的天数 function getMonthDays(year,month){ var thisDate = new Date(year,month,0); //当天数为0 js自动处理为上一月的最后一天 return thisDate.getDate(); }

  • js获取URL的参数的方法(getQueryString)示例

    复制代码 代码如下: function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = location.search.substr(1).match(reg); if (r != null) return unescape(decodeURI(r[2])); return null; }

  • 浅析JS获取url中的参数实例代码

    js获取url中的参数代码如下所示,代码简单易懂,附有注释,写的不好还请见谅! function UrlSearch() { var name, value; var str = location.href; //取得整个地址栏 var num = str.indexOf("?") str = str.substr(num + 1); //取得所有参数 stringvar.substr(start [, length ] var arr = str.split("&&

  • 前端JS获取URL参数的4种方法总结

    目录 前言 方法1: 字符串 split 方法 方法2: 利用 URLSearchParams 方法 方法3: 利用正则匹配方法 方法4: 使用第三方库 qs 总结: 前言 对于前端来说,无论是在面试或者工作中都可能遇到处理 url 参数的问题,使用框架进行项目开发时或许不用,有自带的获取参数方式,但是抛开使用框架来说我们也可以使用原生 js 方式或者借用第三方库来实现参数的获取并对象化,下面就对具体用法进行介绍整理. 方法1: 字符串 split 方法 因为一个 url 地址是字符串形式的,所

  • js获取url参数的使用扩展实例

    最近网站改版,发现网站的广告都是直接网址,如果转向一下,对于本站的全职会好点 需要一个html页面来传递参数所以用到个js获取url参数的代码,就一个funciton 参考http://img.jb51.net/url.htm?url=http://www.baidu.com  复制代码 代码如下: <script language="javascript" type="text/javascript"> //js获取url参数的functionfunc

  • JS获取url参数、主域名的方法实例分析

    本文实例讲述了JS获取url参数.主域名的方法.分享给大家供大家参考,具体如下: <script> alert(location.hostname) alert(location.port) alert(location.pathname) alert(location.search) </script> <script> function winsx(url) //URL传递的参数 { var winurl =url?url:(unescape(window.loca

  • JS获取url参数,JS发送json格式的POST请求方法

    <script type="text/javascript"> 一.获取url所有参数值 function US() { var name, value; var str = location.href; var num = str.indexOf("?"); str = str.substr(num + 1); var arr = str.split("&"); for (var i = 0; i < arr.leng

随机推荐