【JavaScript】window.location用法

目录

对象常用属性

使用示例

对象常用方法

运用扩展


对象常用属性

  • hash(URL 的锚部分)
  • host(当前 URL 的主机和端口)
  • hostname(当前 URL 的主机名)
  • href(当前页面的 URL)
  • origin(URL 的协议、主机名和端口号)
  • port(当前 URL 的端口号)
  • pathname(当前路径)
  • protocol(当前 URL 的协议)
  • search(URL 的 查询字符串部分)

使用示例

以 http://www.mysite.com:8080/test?id=10086&username=xxx为例,

1、 获取当前url:window.location.href
输出:http://www.mysite.com:8080/test?id=10086&username=xxx

2、 获取协议:window.location.protocol
输出:http:

目前url的协议比较多,比如还有:

  • file:
  • ftp:
  • http:
  • https:
  • mailto:

3、获取域名:window.location.hostname
输出:www.mysite.com

4、获取域名+端口:window.location.host
输出:www.mysite.com:8080

5、获取路径部分:window.location.pathname
输出:/test

6、获取端口号:window.location.port
输出:8080

如果端口是标准的(例如HTTP的80和HTTPS的443),则不会返回端口号

7、获取请求的参数:window.location.search
输出:?id=10086&username=xxx

8、获取锚部分,包括哈希符号(#):window.location.hash
输出:#xxx

9、URL 的协议、主机名和端口号:window.location.origin
输出:http://www.mysite.com:8080

也可以采用拼接方式:

let baseUrl = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '') + '/';

console.log(baseUrl);

10、获取域名+端口+路由
let routerIndex = window.location.href.indexOf('?');
let url = window.location.href.slice(0, routerIndex > 0 ? routerIndex : window.location.href.length);
console.log(url);

输出:http://www.mysite.com:8080/test

对象常用方法

  • location.assign() 加载一个新的文档,就相当于一个链接,跳转到指定的url,例如:location.assign("https://www.baidu.com");
  • location.reload() 重新加载当前文档,没有参数或者参数是 false,它就会用 HTTP 头 If-Modified-Since 来检测服务器上的文档是否已改变。如果文档已改变,reload() 会再次下载该文档。如果文档未改变,则该方法将从缓存中装载文档。这与用户单击浏览器的刷新按钮的效果是完全一样的。如果该方法的参数为 true,那么会绕过缓存,从服务器上重新下载该文档。这与用户在单击浏览器的刷新按钮时按住 Shift 健的效果是完全一样。
  • location.replace() 用一个新文档取代当前文档,不会在 History 对象中生成一个新的记录。当使用该方法时,新的 URL 将覆盖 History 对象中的当前记录。   

运用扩展

1、获取相对路径

做法:

  • 获取 Url,
  • 把 Url 通过 // 截成两部分,
  • 从后一部分中截取相对路径。如果截取到的相对路径中有参数,则把参数去掉。
function getUrlRelativePath(){
  var url = document.location.toString();
  var arrUrl = url.split("//"); 
  var start = arrUrl[1].indexOf("/");
  var relUrl = arrUrl[1].substring(start);//stop省略,截取从start开始到结尾的所有字符 
  if(relUrl.indexOf("?") != -1){
    relUrl = relUrl.split("?")[0];
  }
  return relUrl;
}

 2、获取指定参数

   2.1 通过正则表达式  

function getQueryString(name) {
    var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
    var result = window.location.search.substr(1).match(reg);
 
    if (result != null) {
       return unescape(result[2]);
    }
    return null;
}
getQueryString('username');

 2.2 split拆分法

function getRequest() {
        var url = location.search; //获取url中"?"符后的字串
        var theRequest = new Object();
 
        if (url.indexOf("?") != -1) {
                var str = url.substr(1);
                strs = str.split("&");
             for(var i = 0; i < strs.length; i ++) {
                     theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
              }
        }
    return theRequest;
}
console.log(getRequest()['username']);

### JavaScript `window.location` 使用方法 #### 概述 `window.location` 对象用于获取当前页面的地址 (URL),也可以用来把浏览器重定向到新的页面。此对象是 `location` 的别名,意味着无需通过 `window.` 来调用它[^1]。 #### 修改 URL 和 页面重定向的方法 存在多种方式来改变网页的位置: - **设置 `href` 属性** 可以直接修改 `window.location.href` 来实现页面跳转。 ```javascript window.location.href = 'https://www.example.com'; ``` - **使用 `assign()` 方法** 此函数同样能加载一个新的文档。 ```javascript window.location.assign('https://www.example.com'); ``` - **利用 `replace()` 函数** 不仅能够替换当前文档而不创建新条目于浏览历史中,而且不允许用户返回至被取代的页面。 ```javascript window.location.replace('https://www.example.com'); ``` 以上三种技术均允许开发者指定目标网址作为参数传递给它们;然而,在处理历史记录方面有所区别——`assign()` 将保留前一页以便回溯,而 `replace()` 则不会这样做[^2]。 #### 刷新页面 除了导航外,还可以借助 `reload()` 方法重新载入当前页面的内容。值得注意的是,在单页应用框架如 Angular 中可能存在更优的选择而非依赖全局窗口对象来进行刷新操作[^3]。 ```javascript // 强制不缓存地重新加载页面 window.location.reload(true); ``` #### 同步导航栏与 Tab 状态 当涉及到复杂的前端路由逻辑时,可能遇到过这样的情况:点击链接后虽然成功转向了预期位置但是顶部菜单却没有相应变化。为了避免这种情况发生,可以在每次切换之前先保存好现有界面配置再做进一步动作,并在完成转移之后立即恢复这些设定从而保持一致性的用户体验[^4]。 ```javascript // 假设有一个名为 saveStateToLocalStorage 的辅助功能可序列化并储存状态数据 saveStateToLocalStorage(currentNavStatus); // 执行页面跳转... window.location.href = targetUrl; // ...到达目的地后再执行 restoreStateFromLocalStorage 更新UI组件 restoreStateFromLocalStorage(); ``` #### 关键差异对比 为了更好地理解各个 API 之间的差别,请参阅下表总结的关键特性比较: | 特性/方法 | `href` 设置 | `assign()` | `replace()` | | --- | --- | --- | --- | | 是否添加到历史栈? | 是 | 是 | 否 | 综上所述,选择哪种手段取决于具体应用场景以及对于浏览器前进/后退行为的需求[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值