解析JavaScript中的相对URL

Jer*_*nck 3 html javascript url rfc3986

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

例如,我在http:// a/b/c/d; p?q并遇到href值"../g"(假设没有<base>元素).结果绝对值为:http:// a/b/g.

是否有一个JS库已经这样做了?我不得不相信.

有关所需内容的更多信息,请参阅规范:http: //tools.ietf.org/html/rfc3986#section-5.4

eri*_*icP 12

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

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

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

如果您希望基础相对于当前文档,您可以明确地这样做:

u = (new URL("?newSearch", document.location)).href
Run Code Online (Sandbox Code Playgroud)

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


Jer*_*nck 10

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

  • 换句话说,*DOM 属性*(通过 `someAnchorElement.href` 访问)返回解析后的 URL,而 *HTML 属性*(通过 `someAnchorElement.getAttribute('href')` 或 `someAnchorElement.attributes.href` 访问) ) 返回它最初在 HTML 中编写的内容。(好吧,即使这不是 100% 正确,但谷歌搜索“prop vs attr”会引发大量相关讨论。) (2认同)