Javasrcipt中從一個url或者從一個字符串中獲取參數值得方法


從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()方法后,就會得到一個包含所有需要的參數和參數對應的值得對象了;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM