如何从window.location.href中去除协议、主机和端口?求更优实现
如何从window.location.href中去除协议、主机和端口?
你当前的代码存在逻辑问题(比如会在pathname和search之间多余添加斜杠,导致URL格式错误),而且写法比较繁琐。这里有两种更简洁可靠的实现方式:
方法一:直接拼接路径、查询参数和哈希
利用window.location的原生属性,直接拼接pathname(路径)、search(查询参数)和hash(哈希锚点)即可,这三个属性的组合正好是协议、主机和端口之后的全部内容:
const relativeUrl = window.location.pathname + window.location.search + window.location.hash; console.log(relativeUrl);
这种方式无需任何条件判断,自动覆盖所有场景(无论查询参数或哈希是否存在),且不会出现格式错误。
方法二:通过Origin替换
window.location.origin属性包含了协议、主机和端口的完整组合(格式为protocol://host:port),直接将其从href中替换为空字符串即可:
const relativeUrl = window.location.href.replace(window.location.origin, ''); console.log(relativeUrl);
这种写法更直观,一眼就能看出是移除了origin部分,但注意origin属性从IE11开始支持,现代浏览器均已兼容。
内容的提问来源于stack exchange,提问作者william_eduards
相关产品推荐
相关产品推荐

