今天,突然被同學(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