我正在构建一个 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
我正在构建一个 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
事实证明,.href
A 元素的属性(不是.getAttribute('href')
,而是.href
)返回解析的(绝对)URL。
在现代浏览器和节点中,内置的 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 组件(协议、主机、路径、搜索、哈希等)。
不错的纯 JS 解决方案,无需 DOM:https ://gist.github.com/1088850 (适用于任何地方,但对服务器端 JS 特别有用)。
JavaScript URL构造函数处理相对 url。所以在你的情况下:
new URL("../g", "http://a/b/c/d;p?q").href
// returns "http://a/b/g"