現在來了解一下JavaScript中的location對象。location記錄了頁面文檔的位置信息,當然這個位置不是地址位置,而是指web中的文檔位置。location其實是一個很特殊的對象,首先它是window的屬性,同時也是document的屬性,換句話說window.location和document.location引用的同一個對象。location的有用之處不僅僅是它記錄文檔信息,同時它還將文檔的URL解析為不同的部分,編程時可以通過不同的屬性方便地引用各個部分,下表列出來location中URL的各個部分:
屬性名稱 | 示 例 | 描 述 |
hash | #test | 返回URL中的hash值,#號后跟數字,如果URL中沒有哈希值返回空字符串 |
host | www.test.com:80 | 返回服務器名稱和端口號 |
hostname | www.test.com | 返回不含端口號的服務器名稱 |
href | http://www.test.com | 返回加載文檔的完整URL地址,location的toString函數返回該值 |
pathname | /admin/login.html | 返回URL中除server名稱和端口的目錄和文件名稱 |
port | 80 | 服務器端口 |
protocol | http | 加載的文檔URL所使用的協議 |
search | ?q=javascript | 返回查詢字符串 |
雖然通過location可以輕易訪問到查詢字符串,但是想獲取查詢字符串中的參數就沒有這么方便,可以通過如下函數來分離各個參數的名稱和值:
1 function getQueryStringArgs() { 2 //獲取查詢字符串,通過substring去掉最前面的問號 3 var qs = (location.search.length > 0) ? location.search.substring(1) : ""; 4 //創建保存查詢參數的對象 5 var args = {}; 6 //獲取參數每一項 7 var argItems = qs.split('&'); 8 var item = null, name = null, value = null; 9 //遍歷每個項目,通過=號分隔參數名稱和值 10 for (var i = 0; i < argItems.length; i++) { 11 item = argItems[i].split('='); 12 name = decodeURIComponent(item[0]); 13 value = decodeURIComponent(item[1]); 14 args[name] = value; 15 } 16 17 return args; 18 }
通過location我們可以改變加載的文檔。首先,也是最常用的方法就是使用assign,通過assign使窗體加載新指定的URL:
1 window.location.assign(http://www.google.com);
通過調用assign可以立即加載指定的URL,並且咋瀏覽器歷史記錄中增加一條,當然如果我們設置location.href屬性的值或者直接設置location對象為一個URL,效果等同於調用assign一樣,立即打開新的URL:
1 window.location = "http://www.google.com"; 2 window.location.href = http://www.google.com;
href的方式似乎是我們最常用的了。另外修改location中其他的屬性也會改變加載的頁面,使瀏覽器重新加載頁面,如下代碼:
1 window.location = "http://www.test.com"; 2 //修改hash 3 location.hash = "#section"; 4 //修改查詢字符串 5 location.search = "?q=javascript"; 6 //修改服務器名稱 7 location.hostname = "www.google.com"; 8 //修改pathname 9 location.pathname = "test";
當然通過上面的方法加載新的URL時會為瀏覽器歷史記錄增加一條,那么點擊向后的時候會退回的前一個地址,如果我們不想記錄瀏覽歷史,可以通過replace函數來實現該功能:
1 window.location.replace(http://www.cnblogs.com);
location還有一個有用的函數reload,通過reload可以從新加載文檔,但是首先會檢查緩存區是否有該地址的文檔,如果有從緩存區加載,否則從服務器加載,但是可以通過參數來取消這一策略:
1 //從新加載,有可能從緩存加載 2 window.location.reload(); 3 //從新加載,直接從服務器加載 4 window.location.reload(true);
location是一個非常有用的對象,在編程時經常會用到,在此僅當拋磚引玉。如果有其他值得注意的或者有錯誤歡迎指正。
有園友反應需要說明BOM和DOM,由於本文章不是介紹BOM和DOM,因此把相關鏈接貼出來,大家可以閱讀:
關於JavaScript組成:http://javascript.about.com/od/browserobjectmodel/a/bom01.htm
關於BOM:http://msdn.microsoft.com/en-us/library/ms952643.aspx
也可以看:http://titan.iteye.com/blog/60389