在JavaScript中,location對象不只提供了與當前窗口中加載的文檔想的信息,還提供了一些導航功能,事實上,location對象是一個很特別的對象,由於它既是window對象的屬性,又是document對象的屬性,也就是說,window.location和document.location引用的是同一個對象。location對象的用處不止表如今它保存着當前文檔的信息,還表如今它將URL解析爲獨立的片斷,讓開發人員能夠經過不一樣的屬性訪問這些片斷。數組
雖然經過上面的屬性能夠訪問到location對象的大多數信息,但其中訪問URL包含的查詢字符中的屬性並不方便。儘管location.search返回從問號到URL末尾的全部內容,但卻沒有辦法逐個訪問其中的每一個查詢字符串參數,爲此,能夠像下面這樣建立一個函數,用以解析查詢字符串,而後返回包含全部參數的一個對象。瀏覽器
//decodeURIComponent() 函數可對 encodeURIComponent() 函數編碼的 URI 進行解碼。 var test1="http://www.cnblogs.com/yuyujuan/" document.write(encodeURIComponent(test1)+ "<br />") //http%3A%2F%2Fwww.cnblogs.com%2Fyuyujuan%2F document.write(decodeURIComponent(test1)) // http://www.cnblogs.com/yuyujuan/ // 查詢字符串 function getQuery(){ //取得查詢字符串並去掉開頭的問號 var qs = (location.search.length > 0 ? location.search.substring(1):""); //保存數據的對象 var args = {}; //取得每一項 var items = qs.length ? qs.split("&"):[]; var item = null; var name = null; var value = null; //在for循環中使用 var i = 0,len = items.length; for(i=0;i<len;i++){ item = items[i].split("="); name = decodeURIComponent(item[0]); value = decodeURIComponent(item[1]); if(name.length){ args[name] = value; } } return args; }
//假設地址爲https://i.cnblogs.com/EditPosts.aspx?opt=1
var args =getQuery();
console.log(args["opt"]); //1
這個函數的第一步是先去掉查詢字符串開頭的問號,固然,前提是location.search中必需要包含一個或多個字符串,而後,全部參數將被保存在args對象中,該對象一字面量形式建立,在根據&來分割查詢字符串,並返回name=value格式的字符串數組。在使用for循環迭代這個數值,並根據=來分割每一項,從而返回第一項爲參數名,第二項爲參數值的數組,最後將name做爲args對象的屬性,將value做爲對於的屬性值。緩存
使用location對象能夠經過不少方式來改變瀏覽器的位置,首先,也是最經常使用的方法,就是使用assign()方法。服務器
location.assign("http://www.cnblogs.com/yuyujuan/");
//等效於:
window.location = 'http://www.cnblogs.com/yuyujuan/';
location.href = "http://www.cnblogs.com/yuyujuan/";
上面的方法均可以當即打開新URL並在瀏覽器的歷史記錄中生成一條記錄,另外還能夠修改location對象的其餘屬性也能夠改變當前加載的頁面。網絡
//將URL修改成"http://www.cnblogs.com/yuyujuan/?q=js"
location.search = "?q=js";
當經過上述的任何一種方法修改URL以後,瀏覽器的歷史記錄中就會生成一條新的記錄,所以用戶經過單擊「後退」按鈕都會導航到前一個頁面,要禁用這種行爲,可使用replace()方法,這個方法值接收一個參數,即要導航到的URL;結果真後會致使瀏覽器位置改變,但不會在歷史記錄中生成新記錄。在調用replace()方法以後,用戶不能回到前一個頁面。函數
location.replace("http://www.cnblogs.com/yuyujuan/");
reload()方法的做用是從新加載當前顯示的頁面,若是調用reload()時不傳遞任何參數,頁面就會以最有效的方式從新加載,也就是說,若是頁面自上次請求以來並無改變過,頁面就會從瀏覽器緩存中從新加載。若是要強制從服務器從新加載,就須要向下面這樣爲該方法傳遞參數true。編碼
location.reload(); //從新加載(可能從緩存中加載)
location.reload(true); //從新加載(從服務器從新加載)
位於reload()調用以後的代碼可能執行,可能不執行,這要取決於網絡延遲或系統資源等隱性,所以,最好將reload()放在代碼的最後一行。spa