如何正确地添加搜索查询参数,以url包含哈希在javascript
How to properly add search query param to url containing hash in javascript?
我想为每个链接添加一个基本url和查询参数:
function buildURL(relativePath) {
var url = new URL('http://example.com/' + relativePath);
url.searchParams.set('utm_source', 'app');
return url.toString();
}
在大多数情况下都可以正常工作:
buildURL('search')
"http://example.com/search?utm_source=app"
buildURL('search?q=query&page=2')
"http://example.com/search?q=query&page=2&utm_source=app"
当我添加一个锚时,问题开始了:
buildURL('search#anchor')
"http://example.com/search?utm_source=app#anchor"
buildURL('search#anchor?q=query')
"http://example.com/search?utm_source=app#anchor?q=query"
这不是一个带锚的有效URL。
关于如何使用URL克服这个问题有什么想法吗?
编辑
预期的结果是在锚 之后添加查询参数。 buildURL('search#anchor')
"http://example.com/search#anchor?utm_source=app"
buildURL('search#anchor?q=query')
"http://example.com/search#anchor?utm_source=app?q=query"
function buildURL(relativePath) {
var url = new URL('http://example.com/' + relativePath);
url.searchParams.set('utm_source', 'app');
return url.toString();
}
console.log(buildURL("search"));
console.log(buildURL("search?q=query&page=1"));
console.log(buildURL("search#anchor"));
console.log(buildURL("search#anchor?q=query"));
不要在搜索参数中传递散列。
但是如果必须,您可以检测散列,将其从参数中分离出来,设置搜索参数并添加散列
function buildURL(relativePath) {
var hash = "";
if (relativePath.indexOf("#")!=-1) {
var parts = relativePath.split("#");
hash = encodeURIComponent(parts[1]); // optionally handle ? in the hash part
relativePath=parts[0];
}
var url = new URL('http://example.com/' + relativePath);
url.searchParams.set('utm_source', 'app');
if (hash) url.hash=hash;
return url.toString();
}
console.log(buildURL("search"));
console.log(buildURL("search?q=query&page=1"));
console.log(buildURL("search#anchor"));
console.log(buildURL("search#anchor?q=query"));
应该可以。在查询参数
之后传递哈希值function buildURL(path) {
var relativePath = path.split('#')
var url = new URL('http://example.com/' + relativePath[0]);
url.searchParams.set('utm_source', 'app');
url.hash = relativePath[1] ? relativePath[1] : ''
return url.toString();
}
console.log(buildURL("search"));
console.log(buildURL("search?q=query&page=1"));
console.log(buildURL("search#anchor"));
console.log(buildURL("search#anchor?q=query"));
console.log(buildURL("searchr?q=query&q2=query2#anchor"));
相关文章:
- 如果当前url包含某些内容,请采取措施
- 如何从文档 URL 获取哈希
- 如果 URL 包含使用 JavaScript 重定向的特定端口
- Angular ui路由器向url添加哈希
- 如何使用JavaScript获取包含哈希片段的先前url
- 如果URL包含字符串don't运行jQuery函数
- 当 URL 包含“#”时,jQuery Document 就绪失败
- 有没有任何方法可以在单页应用程序中记录url和哈希片段
- 如何阻止任何滑块向 URL 添加哈希标签
- Javascript - 如果 url 包含 X,请忽略脚本,否则运行脚本
- 在 JW 播放器开始之前不显示图像,如果 URL 包含字符串 base64
- j查询触发器单击如果 URL 包含参数
- 如何在 ASP.NET 中对图像源 URL 进行哈希处理
- 如何在 Javascript 中获取 url 的哈希部分(新的浏览器版本)
- AngularJS-自动向URL添加哈希标签-覆盖搜索参数
- Pull包含哈希标记的完整URL参数
- 如果当前url包含,JS将用户重定向到不同的页面
- 不带参数的当前URL,哈希,http://
- 如果URL在初始页面加载时包含哈希
- 如何正确地添加搜索查询参数,以url包含哈希在javascript