JavaScript location 對象
■知識點
location對象存儲了與當(dāng)前文檔位置(URL)相關(guān)的信息,簡單地說就是網(wǎng)頁地址字符串。使用window對象的location屬性可以訪問。
location對象定義了8個屬性,其中7個屬性可以獲取當(dāng)前URL的各部分信息,另一個屬性(href)包含了完整的URL信息,詳細(xì)說明如表所示。為了便于更直觀地理解,表中各個屬性將以下面的URL示例信息為參考進(jìn)行說明。
http://www.mysite.cn:80/news/index.asp?id=123&name= location#top
屬 性 | 說 明 |
href | 聲明了當(dāng)前顯示文檔的完整URL,與其他location屬性只聲明部分URL不同,把該屬性設(shè)置為 新的URL會使瀏覽器讀取并顯示新的URL內(nèi)容 |
protocol | 聲明了 URL的協(xié)議部分,包括后綴的冒號。例如:“http:” |
host | 聲明了當(dāng)前URL中的主機名和端口部分。例如:“www.mysite.cn:80” |
hostname | 聲明了當(dāng)前URL中的主機名。例如:“www.mysite.cn” |
port | 聲明了當(dāng)前URL的端口部分。例如: “80” |
pathname | 聲明了當(dāng)前URL的路徑部分》例如:“ news/index.asp ” |
search | 聲明了當(dāng)前URL的查詢部分,包括前導(dǎo)問號。例如:“?id=123&name=location” |
hash | 聲明了當(dāng)前URL中錨部分,包括前導(dǎo)符(#)。例如:“#top”,指定在文檔中錨記的名稱 |
使用location對象,結(jié)合字符串方法可以抽取URL中查詢字符串的參數(shù)值。
■實例設(shè)計
下面的示例定義了一個獲取URL査詢字符串參數(shù)值的通用函數(shù),該函數(shù)能夠抽取每個參數(shù)和參數(shù)值,并以名/值對的形式存儲在對象中返回。
var querystring = function () { //獲取URL査詢字符串參數(shù)值的通用涵數(shù)
var q = location.search.substring(1); //獲取査詢字符串,如:“id=123.&nanvd= location”
var a = q.split("&"); //以&符號為界把査詢字符串劈開為數(shù)組
var o = {}; //定義一個臨時對象
for( var i = 0; i <a.length; i++) //遍歷數(shù)組
var n = a[i].indexOf("="); //獲取每個參數(shù)中的等號下標(biāo)位置
if (n == -i) continue; //如果沒有發(fā)現(xiàn)則跳到下一次循環(huán)繼續(xù)操作
var vl = a[i].substring(0, n); //截取等號前的參數(shù)名稱
var v2 = a[i].substring (n+1); //截取等號后的參數(shù)值
o[vl] = unescape (v2); //以名/值對的形式存儲在對象中
}
return o; //返回對象
}
調(diào)用該函數(shù),即可獲取URL中的查詢字符串信息,并以對象形式讀取它們的值。
var fl = querystring(); //調(diào)用查詢字符串函數(shù)
for(var i in fl) { //遍歷返回對象,獲取每個參數(shù)及其值
console.log(i + "=" + f1[i]);
}
如果當(dāng)前頁面的URL中沒有查詢字符串信息,用戶可以在瀏覽器的地址欄中補加完整的查詢字符串,如“?id=123&name= location”,再次刷新頁面,即可顯示查詢的查詢字符串信息。
如果改變 location.hash 屬性值,則頁面會跳轉(zhuǎn)到新的描點(<a name="anchor">g!<i<element id="anchor">), 但頁面不會重載。
location.hash = "#top";
除了設(shè)置location對象的href屬性外,還可以修改部分URL信息,用戶只需要給location對象的其他屬性賦值即可。這時會創(chuàng)建一個新的URL,瀏覽器會將它裝載并顯示出來。
如果需要URL其他信息,只能通過字符串處理方法截取。例如,如果要獲取網(wǎng)頁的名稱,可以這樣設(shè)計。
var p = location.pathname;
var n = p.substring(p.lastlndexOf("/")+!);
如果要獲取文件擴展名,可以這樣設(shè)計。
var c = p.substring(p.lastlndexOf(".")+1);
location對象還定義了兩個方法:reload()和replace()。
reload():可以重新裝載當(dāng)前文檔。
replace():可以裝載一個新文檔而無須為它創(chuàng)建一個新的歷史記錄。也就是說,在瀏覽器的歷史列表中,新文檔將替換當(dāng)前文檔。這樣在瀏覽器中就不能夠通過“返回”按鈕返回當(dāng)前文檔。 對那些使用了框架并且顯示多個臨時頁的網(wǎng)站來說,replaceO方法比較有用。這樣臨時頁面就不會被存儲在歷史列表中。
點擊加載更多評論>>