javascript - 处理JS中的查询字符串,如http_build_query等

标签 javascript query-string location-href

这就是我所拥有的

if(condition1) {
     location.href = location.href+'/?site_type=normal';
}
else if(condition2) {
    location.href = location.href+'/?site_type=other';
}

当然,如果 location.href 上已经有查询变量,那就是一个问题,等等。

我需要

  1. 从查询字符串中查找变量
  2. 如果 site_type 已存在,则将该值替换为“正常”或“其他”
  3. 使用新的 site_type 重建网址

编辑: 我发现我需要考虑各种 URL:

  • 域名.com
  • domain.com/path/to/sth/
  • domain.com/?site_type=normal
  • domain.com?var=123&foo=987
  • domain.com/path/?site_type=normal&var=123&foo=987

所以,这是我的想法,欢迎提出建议:

var searchstring = window.location.search;
var url = window.location.href;

console.log('search: ' +  searchstring);
console.log( 'url: ' +  url);
// strip search from url
url = url.replace(searchstring,"");
console.log( 'url: ' +  url);
//strip site_type from search
searchstring = searchstring.replace("&site_type=normal","")
                        .replace("&site_type=other","")
                        .replace("?site_type=normal","")
                        .replace("?site_type=other","")
                        .replace("?","")
                        ;
console.log('search: ' +  searchstring);
if(searchstring != ''){searchstring = '&' + searchstring;}
var final = url + '?site_type=normal' + searchstring;
final = final.replace("&&","&");
console.log('final: ' +  final);

最佳答案

您可以使用window.location.search直接访问查询字符串。您可以使用此正则表达式技巧将其转换为对象 here .

var queryString = {};
window.location.search.replace(/([^?=&]+)(=([^&]*))?/g, function($0, $1, $2, $3) {
  queryString[$1] = $3; }
);

然后适本地设置 queryString 上的 site_type

queryString["site_type"] = "normal";

最后,将其转换回字符串并将其设置为 window.location.search

var searchString = "";
for ( q in queryString ) {
  searchString+="&" + q + "=" + queryString[q];
}
window.location.search = searchString;

关于javascript - 处理JS中的查询字符串,如http_build_query等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14226811/

相关文章:

javascript - 在 zip 中从 s3 下载多个文件的正确方法?

php - 使用谷歌地图 API - 标记集群

javascript - Javascript 中的查询字符串

python - Cherrypy 中的路由 href

javascript - 如何在 onchange 函数之后将值加载到输入中

javascript - React 组件中的可选函数 prop 流类型检查失败

c# - 查询字符串唯一字符串生成器?

asp.net-mvc - 如何在 ASP.net Controller 操作中访问整个查询字符串

javascript - 使用 jQuery 选择特定 href 的 anchor 标记

javascript - 简单的返回顶部按钮不适用于 AngularJS