用js獲取地址欄參數(shù)的方法

今天,突然被同學(xué)問到如何獲取地址欄參數(shù)的問題扫外,于是在網(wǎng)上查找一二轴猎,發(fā)現(xiàn)實現(xiàn)方法主要分為兩種嵌莉,一種是通過正則表達式來進行獲取參數(shù),另一種則是split拆分法捻脖。在這里推薦一篇比較好的博客锐峭,分享一下中鼠。

用JS獲取地址欄參數(shù)的方法(兩種)
方法一:采用正則表達式獲取地址欄參數(shù):( 強烈推薦,既實用又方便Q伛)

/*
對window.location.search.substr(1).match(reg)解釋:
1援雇、location是包含了相關(guān)的url的信息,它是windown的一部分椎扬。
2熊杨、search是一個可以查詢的屬性,可以查詢盗舰?之后的部分晶府。
3、match()是你要匹配的部分 后面可以是正則表達式.
4钻趋、return unescpe(r[2]) 返回的值 一個數(shù)組
*/
function  GetQueryString(name){
  var  reg =  new  RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
  var  r = window.location.search.substr(1).match(reg); 
  if(r!=null)  return  unescape(r[2]);  return  null;
}

 
// 調(diào)用方法

alert(GetQueryString("參數(shù)名1"));

alert(GetQueryString("參數(shù)名2"));

alert(GetQueryString("參數(shù)名3"));
  • 注:當(dāng)通過URL傳參數(shù)時川陆,網(wǎng)絡(luò)默認的傳輸編碼格式為encodeURI對漢字進行編碼,所以在傳輸過程中會出現(xiàn)亂碼蛮位,解決方案為:將unescape(r[2])轉(zhuǎn)變?yōu)?code>encodeURI(r[2])较沪。

下面舉一個例子:
若地址欄URL為:abc.html?id=123&url=http://www.maidq.com
那么,但你用上面的方法去調(diào)用:alert(GetQueryString("url"));
則會彈出一個對話框:內(nèi)容就是 http://www.maidq.com
如果用:alert(GetQueryString("id"));那么彈出的內(nèi)容就是 123 啦失仁;
當(dāng)然如果你沒有傳參數(shù)的話尸曼,比如你的地址是 abc.html 后面沒有參數(shù),那強行輸出調(diào)用結(jié)果有的時候會報錯:
所以我們要加一個判斷 萄焦,判斷我們請求的參數(shù)是否為空控轿,首先把值賦給一個變量:

var  myurl=GetQueryString("url");
if(myurl !=null && myurl.toString().length>0){
  alert(GetQueryString("url"));
}

這樣就不會報錯了!
方法二:傳統(tǒng)方法

<script type="text/javascript">
  function UrlSearch() {   
    var name,value;    
    var str=location.href; //取得整個地址欄
    var num=str.indexOf("?")    
    str=str.substr(num+1); //取得所有參數(shù)   stringvar.substr(start [, length ]
   var arr=str.split("&"); //各個參數(shù)放到數(shù)組里  
   for(var i=0;i < arr.length;i++){     
      num=arr[i].indexOf("=");     
      if(num>0){      
        name=arr[i].substring(0,num);
        value=arr[i].substr(num+1);
        this[name]=value;
     }     
  } } 
  var Request=new UrlSearch(); //實例化
  alert(Request.id);
</script>

比如說把這個代碼存為1.html拂封,那么我要訪問1.html?id=test這個時候就取到test的值了茬射,在html里調(diào)用

<script type="text/javascript">
  var a="http://baidu.com";
</script>
</head>
<body>
  <a id="a1" href="">sadfsdfas</a>
<script>
  var a1=document.getElementById("a1");
  a1.href=a;
</script>
<script type="text/javascript"> 
  var a="http://xxx.com/gg.htm?cctv"; 
  var s=a.indexOf("?"); 
  var t=a.substring(s+1);// t就是?后面的東西了 
</script>

stringvar.substr(start [, length*]
返回一個從指定位置開始的指定長度的子字符串。
stringvar
必選項冒签。要提取子字符串的字符串文字或 String 對象在抛。
start
必選項。所需的子字符串的起始位置萧恕。字符串中的第一個字符的索引為 0刚梭。
length
可選項。在返回的子字符串中應(yīng)包括的字符個數(shù)票唆。
如果 length 為 0 或負數(shù)朴读,將返回一個空字符串。如果沒有指定該參數(shù)惰说,則子字符串將延續(xù)到 stringvar 的最后磨德。

下面列舉出一些相關(guān)的參數(shù):
str.toLowerCase() 轉(zhuǎn)換成小寫 str.toUpperCase() 字符串全部轉(zhuǎn)換成大寫
URL即:統(tǒng)一資源定位符 (Uniform Resource Locator, URL) 完整的URL由這幾個部分構(gòu)成:scheme://host:port/path?query#fragment scheme:通信協(xié)議常用的http,ftp,maito等
host:主機服務(wù)器(計算機)域名系統(tǒng) (DNS) 主機名或 IP 地址缘回。
port:端口號整數(shù)吆视,可選典挑,省略時使用方案的默認端口,如http的默認端口為80啦吧。
path:路徑由零或多個"/"符號隔開的字符串您觉,一般用來表示主機上的一個目錄或文件地址。
query:查詢可選授滓,用于給動態(tài)網(wǎng)頁(如使用CGI琳水、ISAPI、PHP/JSP/ASP/ASP.NET等技術(shù)制作的網(wǎng)頁)傳遞參數(shù)般堆,可有多個參數(shù)在孝,用"&"符號隔開,每個參數(shù)的名和值用"="符號隔開淮摔。
fragment:信息片斷字符串私沮,用于指定網(wǎng)絡(luò)資源中的片斷。例如一個網(wǎng)頁中有多個名詞解釋和橙,可使用fragment直接定位到某一名詞解釋仔燕。(也稱為錨點.)
對于這樣一個URL
http://www.maidq.com/index.html?ver=1.0&id=6#imhere
我們可以用javascript獲得其中的各個部分1, window.location.href整個URl字符串(在瀏覽器中就是完整的地址欄)本例返回值: http://www.maidq.com/index.html?ver=1.0&id=6#imhere
2,window.location.protocolURL 的協(xié)議部分本例返回值:http:
3,window.location.hostURL 的主機部分本例返回值:www.maidq.com
4,window.location.portURL 的端口部分如果采用默認的80端口(update:即使添加了:80),那么返回值并不是默認的80而是空字符本例返回值:""
5,window.location.pathnameURL 的路徑部分(就是文件地址)本例返回值:/fisker/post/0703/window.location.html
6,window.location.search查詢(參數(shù))部分除了給動態(tài)語言賦值以外魔招,我們同樣可以給靜態(tài)頁面,并使用javascript來獲得相信應(yīng)的參數(shù)值本例返回值:?ver=1.0&id=6
7,window.location.hash錨點本例返回值:#imhere

原文地址:http://www.cnblogs.com/fishtreeyu/archive/2011/02/27/1966178.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晰搀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子办斑,更是在濱河造成了極大的恐慌外恕,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乡翅,死亡現(xiàn)場離奇詭異吁讨,居然都是意外死亡,警方通過查閱死者的電腦和手機峦朗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門建丧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人波势,你說我怎么就攤上這事翎朱。” “怎么了尺铣?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵拴曲,是天一觀的道長。 經(jīng)常有香客問我凛忿,道長澈灼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮叁熔,結(jié)果婚禮上委乌,老公的妹妹穿的比我還像新娘。我一直安慰自己荣回,他們只是感情好遭贸,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著心软,像睡著了一般壕吹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上删铃,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天耳贬,我揣著相機與錄音,去河邊找鬼猎唁。 笑死效拭,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的胖秒。 我是一名探鬼主播缎患,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼阎肝!你這毒婦竟也來了挤渔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤风题,失蹤者是張志新(化名)和其女友劉穎判导,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沛硅,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡眼刃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了摇肌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片擂红。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖围小,靈堂內(nèi)的尸體忽然破棺而出昵骤,到底是詐尸還是另有隱情,我是刑警寧澤肯适,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布变秦,位于F島的核電站,受9級特大地震影響框舔,放射性物質(zhì)發(fā)生泄漏蹦玫。R本人自食惡果不足惜赎婚,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望樱溉。 院中可真熱鬧挣输,春花似錦、人聲如沸饺窿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肚医。三九已至,卻和暖如春向瓷,著一層夾襖步出監(jiān)牢的瞬間肠套,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工猖任, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留你稚,地道東北人。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓朱躺,卻偏偏與公主長得像刁赖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子长搀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容