获取URL参数并过滤掉特定参数

Rot*_*075 1 javascript jquery html5-history

我想过滤掉URL中的特定参数.我有以下情况:

  1. 页面已加载(例如:http://test.com/default.aspx?folder = app&test = true)
  2. 加载页面时,会调用一个函数将条目推送到历史记录(pushState):(例如:http://test.com/default.aspx?folder = app&test = true&state = 1)
  3. 现在我想调用一个函数来读取所有参数并输出所有这些参数的状态.所以我最终得到:"?folder = app&test = true"(只是一个字符串值,没有数组或对象).请记住,我不知道是什么参数的所有名字都execpt的state参数

我试过了什么

我知道我可以使用以下代码获取所有参数:

window.location.search
Run Code Online (Sandbox Code Playgroud)

但它会导致:

?folder=app&test=true&state=1

我尝试拆分网址,例如:

var url = '?folder=app&test=true&state=1';
url = url.split('&state=');
console.log(url);
Run Code Online (Sandbox Code Playgroud)

但这不起作用.另外,因为每个请求中的state数字都是动态的.一个解决方案可能是删除url中的最后一个参数,但我也不知道是否会出现这种情况,因此我需要一些过滤机制,只会过滤掉

state=/*regex for a number*/
Run Code Online (Sandbox Code Playgroud)

Ror*_*san 6

要实现这一点,您可以将提供给页面的查询字符串转换为对象,删除state结果的属性 - 假设它存在 - 然后您可以将对象转换回准备使用的查询字符串pushState().像这样的东西:

var qsToObj = function(qs) {
  qs = qs.substring(1);
  if (!qs) return {};    
  return qs.split("&").reduce(function(prev, curr, i, arr) {
    var p = curr.split("=");
    prev[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
    return prev;
  }, {});
}

var qs = '?'; // window.location.search;
var obj = qsToObj(qs);
delete obj.state;
console.log(obj);

var newQs = $.param(obj);
console.log(newQs);
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

感谢这个答案的查询字符串到对象逻辑.