2

我已经获取window.location了一个变量。现在,我想从位置对象中的 href 中删除部分字符串,但仍保留该对象。

换句话说,我想修改 location 对象,并且仍然可以使用window.location.protocoland window.location.host,但是这些功能需要在修改后的对象上工作。

例如,我的浏览器显示"https://my.domain.org/site"如下:

var thisloc = window.location;
Modify the href within that object to "http://my.domain.org/othersite"

//now I want it to fetch "http" instead of "https" based on my modified object
var thisprot = thisloc.protocol;   

那会奏效吗?如果是这样,那就太好了。否则,我必须解析 URL 以从修改后的 href 中获取协议、主机和路径名,这也将实现相同的目标。

4

2 回答 2

1

灵感来自 James Padosley 关于Parsing URLs with the DOM 的帖子!,这里的诀窍是使用锚元素 ( <a>) 作为 URL 构建器/解析器。对于任何锚元素,如果您将其href属性设置为某个 URL,它将被 DOM 解析。此后,您可以通过锚元素上的属性自由修改该 URL 的各个部分。href随时查询该属性以查看完整 URL。

使用问题中的示例......</p>

var builder = document.createElement("a");

builder.href = "https://my.domain.org/site";
builder.protocol = "http://";
builder.pathname = "/othersite";

console.log(builder.href); // http://my.domain.org/othersite

此时,锚元素的 href 将http://my.domain.org/othersite按照要求变为 。这是一个 JS Bin 的实际演示:http: //jsbin.com/omoqen/1/edit

美妙之处在于锚元素具有与对象相同的 URL 组件属性window.location

protocol
host
hostname
port
pathname
search
hash
于 2012-11-05T07:36:30.930 回答
-1

这些是浏览器属性 - 您可以获取和修改值,但引用该属性不会以您描述的方式工作。

于 2012-11-03T04:05:33.343 回答