如何删除window.location中的部分URL?

时间:2012-11-03 04:03:47

标签: javascript window.location

我已将window.location提取到变量中。现在,我想从位置对象中的href中删除部分字符串,但仍然保留该对象。

换句话说,我想修改位置对象,但仍然可以使用window.location.protocolwindow.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获取协议,主机和路径名,这也将实现相同的目标。

2 个答案:

答案 0 :(得分:1)

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

使用问题中的例子......

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

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

protocol
host
hostname
port
pathname
search
hash

答案 1 :(得分:-1)

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