8

我正在构建一个 JS 库,它需要查看 form[action] 和 a[href] 值并将它们解析为绝对 URL。

例如,我在 http://a/b/c/d;p?q 上遇到“../g”的 href 值(假设没有 <base> 元素)。得到的绝对值是:http://a/b/g。

是否已经有一个 JS 库可以做到这一点?我不得不相信。

有关所需内容的更多信息,请参阅规范: https ://www.rfc-editor.org/rfc/rfc3986#section-5.4

4

4 回答 4

17

事实证明,.hrefA 元素的属性(不是.getAttribute('href'),而是.href)返回解析的(绝对)URL。

于 2010-12-09T22:37:42.433 回答
17

在现代浏览器和节点中,内置的 URL 构造函数处理这个:

u = (new URL("?newSearch",
             "http://a.example/with/a/long/path.file?search#fragment")).href

(产量http://a.example/with/a/long/path.file?newSearch

如果您希望基础与当前文档相关,您可以显式执行此操作:

u = (new URL("?newSearch", document.location)).href

除了.href,该URL对象还允许您访问所有 URL 组件(协议、主机、路径、搜索、哈希等)。

于 2017-12-03T05:16:17.303 回答
1

不错的纯 JS 解决方案,无需 DOM:https ://gist.github.com/1088850 (适用于任何地方,但对服务器端 JS 特别有用)。

于 2013-08-07T11:07:46.303 回答
1

JavaScript URL构造函数处理相对 url。所以在你的情况下:

    new URL("../g", "http://a/b/c/d;p?q").href

    // returns "http://a/b/g"
于 2021-03-31T07:49:31.057 回答