【BOM】location對(duì)象

BOM:瀏覽器對(duì)象模型

1、location是最有用的BOM對(duì)象之一。
2、用途:提供了與當(dāng)前窗口中加載的文檔有關(guān)的信息,還提供一些導(dǎo)航功能。
3、location對(duì)象:既是window對(duì)象的屬性,也是document對(duì)象的屬性。(即window.location和document.location引用的是同一個(gè)對(duì)象)

屬性名 例子 說(shuō)明
hash "#contents" 返回URL中的hash(#號(hào)后跟零或多個(gè)字符),如果URL中不包含散列,則返回空字符串
host "www.wrox.com:80" 返回服務(wù)器名稱和端口號(hào)(如果有)
hostname "www.wrox.com" 返回不帶端口號(hào)的服務(wù)器名稱
href "http:/www.wrox.com" 返回當(dāng)前加載頁(yè)面的完整URL。而location對(duì)象的toString()方法也返回這個(gè)值
pathname "/WileyCDA/" 返回URL中的目錄和(或)文件名
port "8080" 返回URL中指定的端口號(hào)。如果URL中不包含端口號(hào),則這個(gè)屬性返回空字符串
protocol "http:" 返回頁(yè)面使用的協(xié)議。通常是http:或https:
search "?q=javascript" 返回URL的查詢字符串。這個(gè)字符串以問(wèn)號(hào)開(kāi)頭。

location對(duì)象保存著當(dāng)前文檔的信息,還將URL解析為獨(dú)立的片段,讓開(kāi)發(fā)人員可以通過(guò)不同的屬性訪問(wèn)這些片段。

屬性名 例子 說(shuō)明
hash "#contents" 返回URL中的hash(#號(hào)后跟零或多個(gè)字符),如果URL中不包含散列,則返回空字符串
host "www.wrox.com:80" 返回服務(wù)器名稱和端口號(hào)(如果有)
hostname "www.wrox.com" 返回不帶端口號(hào)的服務(wù)器名稱
href "http:/www.wrox.com" 返回當(dāng)前加載頁(yè)面的完整URL。而location對(duì)象的toString()方法也返回這個(gè)值
pathname "/WileyCDA/" 返回URL中的目錄和(或)文件名
port "8080" 返回URL中指定的端口號(hào)。如果URL中不包含端口號(hào),則這個(gè)屬性返回空字符串
protocol "http:" 返回頁(yè)面使用的協(xié)議。通常是http:或https:
search "?q=javascript" 返回URL的查詢字符串。這個(gè)字符串以問(wèn)號(hào)開(kāi)頭。

查詢字符串參數(shù)

創(chuàng)建一個(gè)函數(shù),用以解析查詢字符串,然后返回包含所有參數(shù)的一個(gè)對(duì)象:

function getQueryStringArgs() {
    //去的查詢字符串并去掉開(kāi)頭的問(wèn)號(hào)
    var qs = (location.search.length > 0 ? location.search.substring(1) : "");

    //保存數(shù)據(jù)的對(duì)象
    args = {};

    //取得每一項(xiàng)
    items = qs.length ? qs.split("&") : [];
    item = null, name = null, value = null;

    //在for循環(huán)中使用
    i = 0;
    len = items.length;

    //逐個(gè)將每一項(xiàng)添加到args對(duì)象中
    for (i = 0; i < len; i++) {
        item = items[i].split("=");
        //用decodeURIComponent解碼name和value,因?yàn)椴樵冏址畱?yīng)該被編碼過(guò)。
        name = decodeURIComponent(item[0]);
        value = decodeURIComponent(item[1]);
        if (name.length) {
            args[name] = value;
        }
    }
    return args;
}
//假設(shè)查詢字符串是?q=javascript&num=10
var args = getQueryStringArgs();

alert(args["q"]);    //javascript
alert(args["num"]);  //10

位置操作

使用location對(duì)象可以通過(guò)很多方式來(lái)改變?yōu)g覽器的位置。

location.assign("http://www.wrox.com");
window.location = "http://www.wrox.com";
location.;  //最常用改變?yōu)g覽器位置的方法

另外,修改location對(duì)象的其他屬性也可以改變當(dāng)前加載的頁(yè)面。

//假設(shè)初始URL為http://www.wrox.com/WileyCDA

//將URL修改為“http://www.wrox.com/WileyCDA/#section1”
location.hash = "#section1";

//將URL修改為“http://www.wrox.com/WileyCDA/?q=javascript”
location.search = "?q=javascript";

//將URL修改為“http://www.yahoo.com/WileyCDA/”
location.hostname = "www.yahho.com";

//將URL修改為“http://www.yahoo.com/mydir/”
location.pathname = "mydir";

//將URL修改為“http://www.yahoo.com:8080/WileyCDA/”
location.port = 8080;

每次修改location的屬性(hash除外),頁(yè)面都會(huì)以新URL重新加載。

replace()

當(dāng)通過(guò)上述任何一種方式修改URL之后,瀏覽器的歷史記錄中就會(huì)生成一條新記錄,因此單擊“后退”按鈕會(huì)導(dǎo)航到前一個(gè)頁(yè)面。
可以用replace()方法禁用上面的行為。

/** 
 * replace()
 * param:要導(dǎo)航到的URL
 * 會(huì)導(dǎo)致瀏覽器位置改變,但不會(huì)在歷史記錄中生成新紀(jì)錄。
 * 因此在調(diào)用replace()方法之后,用戶不能回到前一個(gè)頁(yè)面。
 */
<!DOCTYPE html>
<html>
<head>
    <title>你將不能返回到這兒。</title>
</head>
<body>
<p>請(qǐng)享受這個(gè)頁(yè)面吧,因?yàn)槟銓⒉荒芊祷氐竭@兒來(lái)。</p>
<script type="text/javascript">
    setTimeout(function(){
        location.replace("http://www.baidu.com");
    },1000);
</script>
</body>
</html>

reload()

作用:重新加載當(dāng)前顯示的頁(yè)面。
如果調(diào)用reload()時(shí)不傳遞任何參數(shù),頁(yè)面就會(huì)以最有效的方式重新加載。如果頁(yè)面自上次請(qǐng)求以來(lái)并沒(méi)有改變過(guò),頁(yè)面就會(huì)從瀏覽器緩存中重新加載。如果要強(qiáng)制從服務(wù)器重新加載,則需要像下面這樣為該方法傳遞參數(shù)true。

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

位于reload()調(diào)用之后的代碼可能會(huì)也可能不會(huì)執(zhí)行,因此最好將reload()放在代碼的最后一行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ECMAScript 是 JavaScript 的核心,但如果要在 Web 中使用 JavaScript,那么 B...
    劼哥stone閱讀 880評(píng)論 2 5
  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,090評(píng)論 1 92
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評(píng)論 19 139
  • 標(biāo)題是從知乎套來(lái)的,最近這個(gè)話題很火很多小年輕紛紛搶著作答。 二十歲左右的你出于什么狀態(tài)?其實(shí)只有你自己知道,別人...
    小嘴菇?jīng)鰫?ài)吃肉閱讀 660評(píng)論 4 3
  • 有一本雜志叫《Little Thing 戀物志》借用下 記錄下生活里那些平淡 微小 讓人愉悅的時(shí)刻
    a54c366077c3閱讀 430評(píng)論 0 0

友情鏈接更多精彩內(nèi)容