1、location對象
location是最有用的DOM對象之一,它提供了與當前窗口中的文檔有關的信息,還提供了一些導航功能。location對象是一個很特殊的對象,因為它既是window對象的屬性,也是document對象的屬性;換句話說,window.location和document.location引用的是同一個對象。location對象的用處不只表現在它保存着當前文檔的信息,還表現在它將URL解析為獨立的片段,讓開發人員可以通過不同的屬性訪問這些片段。下標列出了location對象的所有屬性(省略了每個屬性前面的location前綴):
1.1、查詢字符串參數
雖然上面的屬性可以訪問到location對象的大多數信息,但是其中訪問URL包含的查詢字符串的屬性並不方便。盡管location.search返回從問號到URL末尾的所有內容,但是卻沒有辦法逐個訪問其中的每個查詢字符串參數。因此可以創建一個函數,用以解析查詢字符串,然后返回包含所以參數的一個對像。
1.2、位置操作
使用location對象可以通過很多方式來改變瀏覽器的位置。最常用的方式就是使用
assign()方法並為它傳遞一個參數URL:
location.assign('http://www.wrox.com');
這樣就可以打開新URL,並在瀏覽器的歷史記錄中生成一條記錄。如果將location.href和window.location設置為一個URL值。也會以該值調用assign()方法。下面的兩行代碼的效果是一樣的:
window.location = 'http://www.wrox.com';
location.href = 'http://www.wrox.com';
最常用的是設置location.href屬性。
修改location對象的其他屬性也可以改變當前加載的頁面:
//假設初始值URL為:http://www.wrox.com/WileyCDA
<span class="hljs-comment">//將URL修改為:http://www.wrox.com/WileyCDA/#section</span>
location.hash = <span class="hljs-string">'#section'</span>;
<span class="hljs-comment">//將URL修改為:http://www.wrox.com/WileyCDA/?q=javascript</span>
location.search = <span class="hljs-string">'?q=javascript'</span>;
<span class="hljs-comment">//將URL修改為:http://www.wrox.com/WileyCDA/</span>
location.hostname = <span class="hljs-string">'www.wrox.com'</span>;
<span class="hljs-comment">//將URL修改為:http://www.wrox.com/mydir</span>
location.pathname = <span class="hljs-string">'mydir'</span>;
<span class="hljs-comment">//將URL修改為:http://www.wrox.com:8080/WileyCDA/</span>
location.port = <span class="hljs-number">8080</span>;
<span class="hljs-comment">// 每次修改location的屬性(hash除外)都會以新URL重新加載</span>
當通過上述任何一種方式修改URL后,瀏覽器的歷史記錄中就會生成一條新記錄。要禁用這種行為可以使用replace()方法,這個方法只接收一個參數,既要導航到的URL,結果雖然導致瀏覽器位置變化,但不在歷史記錄中生成新記錄。在調用replace()方法后,用戶不能回到前一個頁面,此時后退按鈕將處於禁用狀態:
location.replace('www.wrox.com');
與為重有關的最后一個方法是reload(),作用是重新加載當前顯示的頁面。如果調研那個reload()不傳遞任何參數,頁面就以最有效的方式重載,也就是從瀏覽器緩存中沖洗加載;如果想強制從服務器重新加載,則需要:
location.reload(); //從頁面加載
location.reload(true); //從服務器加載
位於reload()方法后的代碼可能會也可能不會執行,這要取決於網絡延遲或系統資源等因素,因此,最好將reload()放在代碼的最后一行。