BOM中的那點事-location


      現在來了解一下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

關於DOM請看:http://en.wikipedia.org/wiki/Document_Object_Model

和:http://www.w3.org/DOM/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM