原生JS獲取URL鏈接參數(shù)的幾種常見(jiàn)方法
前言
作為一個(gè)前端開(kāi)發(fā),我們很多時(shí)候都需要對(duì)URL進(jìn)行操作和處理,最常見(jiàn)的一種就是獲取URL鏈接中攜帶的參數(shù)值了。使用框架開(kāi)發(fā)的小伙伴可能會(huì)覺(jué)得這很簡(jiǎn)單,因?yàn)榭蚣芴峁┝撕芏喾椒ㄗ屛覀兎奖愕墨@取URL鏈接攜帶的參數(shù)。但是有些時(shí)候我們不能依賴框架,需要我們使用原生JS去獲取參數(shù),這也是面試中經(jīng)常遇到的一道題。今天我們就手撕代碼,利用原生JS去獲取URL鏈接參數(shù)值。
1. 獲取方式總結(jié)
利用原生JS獲取URL鏈接參數(shù)的方法也有好幾種,今天我們依次來(lái)講解常見(jiàn)的幾種:
- 通過(guò)正則匹配的方式
- 利用a標(biāo)簽內(nèi)置方法
- 利用split方法分割法
- 使用URLSearchParams方法
2. 具體實(shí)現(xiàn)方法
2.1 正則匹配法
這是非常中規(guī)中舉的一種方法,重點(diǎn)是要求我們要懂正則表達(dá)式。
代碼如下:
<script> // 利用正則表達(dá)式 let url = "http://www.baidu.com?name=elephant&age=25&sex=male&num=100" // // 返回參數(shù)對(duì)象 function queryURLParams(url) { let pattern = /(\w+)=(\w+)/ig; //定義正則表達(dá)式 let parames = {}; // 定義參數(shù)對(duì)象 url.replace(pattern, ($, $1, $2) => { parames[$1] = $2; }); return parames; } console.log(queryURLParams(url)) </script>
上段代碼中重點(diǎn)是正則表達(dá)式的定義以及replace方法的使用,其中$2分別代表name=elephant、name、elephant,以此類(lèi)推。replace結(jié)合正則更加詳細(xì)的使用方法可以自行下去學(xué)習(xí)。
實(shí)現(xiàn)效果:
2.2 利用a標(biāo)簽
這種方法較少人使用,因?yàn)楫吘褂悬c(diǎn)黑科技的意思在里面。它的原理主要就是利用了a標(biāo)簽得到一些內(nèi)置屬性,如href、hash、search等屬性。
代碼如下:
<script> let URL = "http://www.baidu.com?name=elephant&age=25&sex=male&num=100#smallpig" function queryURLParams(url) { // 1.創(chuàng)建a標(biāo)簽 let link = document.createElement('a'); link.href = url; let searchUrl = link.search.substr(1); // 獲取問(wèn)號(hào)后面字符串 let hashUrl = link.hash.substr(1); // 獲取#后面的值 let obj = {}; // 聲明參數(shù)對(duì)象 // 2.向?qū)ο笾羞M(jìn)行存儲(chǔ) 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>
上段代碼中先創(chuàng)建了一個(gè)a標(biāo)簽,然后就可以根據(jù)a標(biāo)簽的屬性分別得到url的各個(gè)部分了,這其實(shí)和Vue的路由跳轉(zhuǎn)獲取參數(shù)有點(diǎn)類(lèi)似。
實(shí)現(xiàn)效果:
2.3 split分割法
該種方法利用了split可以以某個(gè)字符講字符串分割為數(shù)組的特點(diǎn),巧妙地將各個(gè)參數(shù)分割出來(lái)。
代碼如下:
<script> let URL = "http://www.baidu.com?name=elephant&age=25&sex=male&num=100" function queryURLParams(URL) { // const url = location.search; // 項(xiàng)目中可直接通過(guò)search方法獲取url中"?"符后的字串 let url = URL.split("?")[1]; let obj = {}; // 聲明參數(shù)對(duì)象 let arr = url.split("&"); // 以&符號(hào)分割為數(shù)組 for (let i = 0; i < arr.length; i++) { let arrNew = arr[i].split("="); // 以"="分割為數(shù)組 obj[arrNew[0]] = arrNew[1]; } return obj; } console.log(queryURLParams(URL)) </script>
上傳代碼中如果在實(shí)際項(xiàng)目中,可以直接利用location.search獲取“?”后面的字符串,這里為了方便演示,所以利用split分割了以下。
實(shí)現(xiàn)效果:
2.4 URLSearchParams方法
URLSearchParams方法能夠讓我們非常方便的獲取URL參數(shù),但是存在一定的兼容性問(wèn)題,官網(wǎng)的解釋如下:
URLSearchParams 接口定義了一些實(shí)用的方法來(lái)處理 URL 的查詢字符串。
該接口提供了非常的的方法讓我們來(lái)處理URL參數(shù),這里我們只介紹如何獲取URL參數(shù)值,更加詳細(xì)的使用方法大家可以參考官網(wǎng)。
代碼如下:
<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>
這里我們基本上只用了兩行主要代碼就實(shí)現(xiàn)了參數(shù)的解析。需要注意的是urlSearchParams.entries()返回的是一個(gè)迭代協(xié)議iterator,所以我們需要利用Object.fromEntries()方法將把鍵值對(duì)列表轉(zhuǎn)換為一個(gè)對(duì)象。
關(guān)于迭代協(xié)議,大家可以參考官網(wǎng):迭代協(xié)議
實(shí)現(xiàn)效果:
兼容性:
可以看到我們這個(gè)接口不兼容萬(wàn)惡之源的IE。
附:獲取URL攜帶參數(shù)實(shí)例
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; };
總結(jié)
這里介紹了四種方法來(lái)實(shí)現(xiàn)URL鏈接參數(shù)值的解析,其中使用最為廣泛的應(yīng)該當(dāng)屬split分割法。urlSearchParams 作為后起之秀,也逐漸被大家認(rèn)可,也有很多方法讓它兼容IE。
到此這篇關(guān)于原生JS獲取URL鏈接參數(shù)的幾種常見(jiàn)方法的文章就介紹到這了,更多相關(guān)JS獲取URL參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
快速解決js開(kāi)發(fā)下拉框中blur與click沖突
這篇文章主要幫助大家快速解決js開(kāi)發(fā)下拉框中blur與click沖突,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10把json格式的字符串轉(zhuǎn)換成javascript對(duì)象或數(shù)組的方法總結(jié)
下面小編就為大家?guī)?lái)一篇把json格式的字符串轉(zhuǎn)換成javascript對(duì)象或數(shù)組的方法總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11如何獲取select下拉框的值(option沒(méi)有及有value屬性)
獲取select下拉框的值分為option沒(méi)有value屬性及有value屬性時(shí)的兩種情況,下面分別給出具體的實(shí)現(xiàn)代碼,需要的朋友可以參考下2013-11-11