在javascript中创建一个新的Location对象

Jos*_*son 67 javascript url-parsing

是否可以在javascript中创建一个新的Location对象?我有一个url作为字符串,我想利用javascript已经提供的访问它的不同部分.

这是我正在谈论的一个例子(我知道这不起作用):

var url = new window.location("http://www.example.com/some/path?name=value#anchor");
var protocol = url.protocol;
var hash = url.hash;
// etc etc
Run Code Online (Sandbox Code Playgroud)

这样的事情是可能的,还是我自己必须自己创建这个对象?

CMS*_*CMS 120

好吧,您可以使用锚元素来提取网址部分,例如:

var url = document.createElement('a');
url.href = "http://www.example.com/some/path?name=value#anchor";
var protocol = url.protocol;
var hash = url.hash;

alert('protocol: ' + protocol);
alert('hash: ' + hash);
?
Run Code Online (Sandbox Code Playgroud)

它适用于所有现代浏览器,甚至适用于IE 5.5+.

点击这里查看示例.

  • 我不知道你能做到这一点.整齐. (5认同)
  • 一个重要的注意事项:看起来Internet Explorer有一个错误,它忽略了像这样的对象的pathname属性的前导斜杠.您可以通过执行以下操作来规范化它:`url.pathname = url.pathname.replace(/(^\/?)/,"/");` (4认同)
  • +1.同上.我不知道`<a>`实现了位置. (3认同)

Rae*_*nha 27

如何使用标准URL对象

var url = new URL("http://www.example.com/some/path?name=value#anchor");
var protocol = url.protocol;
var hash = url.hash;
Run Code Online (Sandbox Code Playgroud)

警告:此界面有点新,所以,如果您没有使用转换器,请检查兼容性表并在目标浏览器上进行测试.

  • 只要您不需要支持 Internet Explorer,这绝对是最好的解决方案。URL 接口使用所有与 Location 相同的属性名称,因此它完全向后兼容,但它还添加了一个非常有用的 `searchParams` 属性。 (2认同)

epa*_*llo 8

您可以利用锚元素的力量

var aLink = document.createElement("a");
aLink.href="http://www.example.com/foo/bar.html?q=123#asdf";
alert(aLink.pathname);
Run Code Online (Sandbox Code Playgroud)