我已将window.location
提取到变量中。现在,我想从位置对象中的href中删除部分字符串,但仍然保留该对象。
换句话说,我想修改位置对象,但仍然可以使用window.location.protocol
和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获取协议,主机和路径名,这也将实现相同的目标。
答案 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)
这些是浏览器属性 - 您可以获取和修改值,但引用该属性将无法按照您描述的方式工作。