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