window.location.href重复追加URL:如何实现仅切换企业类型
解决下拉框跳转URL重复追加的问题
这个问题的核心是相对路径的使用导致的URL拼接错误——当你在/companies/type/bank/页面时,'type/'+companyType+'/'是相对于当前页面所在目录的相对路径,自然会在现有路径后继续追加,造成重复。
下面给你几种可靠的解决方法:
方法1:使用根目录开头的绝对路径
直接从网站根目录开始构建URL,这样无论当前页面在哪个层级,都会跳转到正确的位置:
function changeCompanyType(companyType) { window.location.href = '/companies/type/'+companyType+'/'; }
这里的/开头表示从网站根目录出发,最终会生成http://127.0.0.1/companies/type/hospital/这类正确的URL。
方法2:利用URL对象构建(更健壮)
如果你的URL结构可能有变化,用原生的URL对象来处理会更可靠,能避免手动拼接的错误:
function changeCompanyType(companyType) { // 基于当前域名构建完整URL const baseUrl = new URL(window.location.origin + '/companies/type/'); baseUrl.pathname += companyType + '/'; window.location.href = baseUrl.toString(); }
这种方法会确保路径始终是正确的层级,不会出现重复追加的问题。
方法3:替换现有路径中的type部分
如果你需要保留当前URL的其他参数或层级,可以解析并替换现有路径里的企业类型部分:
function changeCompanyType(companyType) { // 匹配当前路径中的type/xxx/部分,替换为新的类型 const newPath = window.location.pathname.replace(/type\/[^\/]+\/?/, `type/${companyType}/`); window.location.href = window.location.origin + newPath; }
这个方法适合页面还有其他路径参数需要保留的场景,比如/companies/region/beijing/type/bank/,替换后会变成/companies/region/beijing/type/hospital/。
内容的提问来源于stack exchange,提问作者Atma
相关产品推荐
相关产品推荐

