location對象

在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";

replace()

當經過上述的任何一種方法修改URL以後,瀏覽器的歷史記錄中就會生成一條新的記錄,所以用戶經過單擊「後退」按鈕都會導航到前一個頁面,要禁用這種行爲,可使用replace()方法,這個方法值接收一個參數,即要導航到的URL;結果真後會致使瀏覽器位置改變,但不會在歷史記錄中生成新記錄。在調用replace()方法以後,用戶不能回到前一個頁面。函數

location.replace("http://www.cnblogs.com/yuyujuan/");

reload()

reload()方法的做用是從新加載當前顯示的頁面,若是調用reload()時不傳遞任何參數,頁面就會以最有效的方式從新加載,也就是說,若是頁面自上次請求以來並無改變過,頁面就會從瀏覽器緩存中從新加載。若是要強制從服務器從新加載,就須要向下面這樣爲該方法傳遞參數true。編碼

location.reload();   //從新加載(可能從緩存中加載)
location.reload(true);  //從新加載(從服務器從新加載)

位於reload()調用以後的代碼可能執行,可能不執行,這要取決於網絡延遲或系統資源等隱性,所以,最好將reload()放在代碼的最後一行。spa

相關文章
相關標籤/搜索