從url中獲取參數值是che程序開發過程中的常用需求,偶然得閑,便抽空研究了一下javasrcipt下,獲取參數的辦法(JAVA中也類似)。
首先看url的規范:
URL組成:
protocol :// hostname[:port] / path / [;parameters][?query]#fragment
協議://主機名[:端口]/ 路徑/[:參數] [?查詢]#Fragment
一個規范的url參數總是在【?query】部分,以 “變量名=值”這樣的形式存在;
這樣就給我們取值提供了一個思路:
第一種方法:利用正則表達式,從url中獲取我們需要的對應的參數的值
1 function getUrlPramByName(name){ 2 var url = window.location.search; //獲取url中?之后的內容
3 var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); 4 if(url){ 5 var r = url.substr(1).match(reg); 6
7 if (r != null) { 8 return decodeURI(r[2]); 9 }else{ 10 return null; 11 } 12 }; 13 };
可以自己在瀏覽器控制台執行下,這種方法只能單獨使用,獲取自己需要的那個參數值得變量
第二種方法: 利用字符串操作將所需要的值全部提出來
function getAllUrlPram(){ var url = window.location.search; //獲取url中?后面的內容
if(url && url.indexOf("?")!= -1){ url = url.substr(1); //去掉前面的?
var arr = url.split("&"); //將字符串以&為分隔符轉化為數組
var obj = {}; //定義一個空對象
for(var i=0;i<arr.length;i++){ var str0 = arr[i].split("=")[0], //將獲得數組中的每一個元素字符串轉換成用"="分割的數組,數組第一個元素即為key
str1 = arr[i].split("=")[1]; //將獲得數組中的每一個元素字符串轉換成用"="分割的數組,數組第一個元素即為value
obj[str0] = decodeURI(str1); //由於url中使用的是轉義后的字符,因此必須使用decodeURI進行解碼
} return obj; }else { return null; } }
這樣我們可以定義一個在String原型鏈上的通用方法了:
String.prototype.getUrlParms = function(){ var index = this.indexOf("?"); if(index !=-1){ var str = this.substr(index+1); var arr = str.split("&"); //將字符串以&為分隔符轉化為數組
var obj = {}; //定義一個空對象
for(var i=0;i<arr.length;i++){ var str0 = arr[i].split("=")[0], //將獲得數組中的每一個元素字符串轉換成用"="分割的數組,數組第一個元素即為key
str1 = arr[i].split("=")[1]; //將獲得數組中的每一個元素字符串轉換成用"="分割的數組,數組第一個元素即為value
obj[str0] = decodeURI(str1); //由於url中使用的是轉義后的字符,因此必須使用decodeURI進行解碼
} return obj; }else{ return; } }
最終對字符串執行getUrlParms()方法后,就會得到一個包含所有需要的參數和參數對應的值得對象了;
