【问题标题】:Remove one of URL query strings which passed to URL as array?删除作为数组传递给 URL 的 URL 查询字符串之一?
【发布时间】:2017-10-30 05:11:56
【问题描述】:

这是网址:

www.example.com/?param%5B%5D=A&param%5B%5D=B

%5B%5D 部分是 [] 以将 param 作为数组传递,该数组在 url 中编码。

现在,我想删除其中一个参数,所需的输出是:

www.example.com/?param%5B%5D=B

我已经搜索过了,但什么也没找到! 所有答案都是关于删除单个值参数,而不是多个。

更新:

我不知道参数的确切位置,即 URL 可能是这样的:

www.example.com/?test=124&test2=456&param%5B%5D=A&param%5B%5D=B

【问题讨论】:

  • 这些参数是否可能被 index.php 之类的 PHP 脚本接收。所以,应该在那里处理。如果不能,在发送请求之前已经处理好了。
  • @LouysPatriceBessette 这些是搜索参数。我想删除其中一个并重新加载页面。用户应该能够在浏览器中通过单击每个参数的 x 关闭按钮来执行此操作
  • 我明白了...所以您必须获取 URL 并执行字符串操作以拆分参数...然后使用它根据用户选择(如复选框或按钮)重建 URL .
  • @LouysPatriceBessette 是的!我正在寻找这种操纵!尝试了一些像这样的业余爱好者:window.location.href = url.replace("param%5B%5D=A",'' "); 但没有奏效。我认为需要正则表达式

标签: javascript jquery regex url query-string


【解决方案1】:

您可以利用 URL WebAPI。

https://developer.mozilla.org/en-US/docs/Web/API/URL

var base = 'http://www.example.com/'
var query = '?param%5B%5D=A&param%5B%5D=B';

var url = new URL(base + query);

var params = new URLSearchParams(url.search);


var filteredParams = params.getAll('param[]')
  .filter(function(el) {
    return el !== "A";
  }).map(function(el){
    return ['param[]', el];
  });

var newParams = new URLSearchParams(filteredParams);

var url = new URL(base + '?' + newParams.toString() );
console.log(url.toString());

【讨论】:

  • 请注意,此 API 的浏览器支持有限
  • 谢谢,但我不知道param[]=A 的确切位置。网址可能是这样的:www.example.com/?test=2112&test2=2&param[]=E&param[]=A&param‌​[]=B
  • 谢谢让我试试!
  • 它在我的浏览器中不起作用!!谢谢。我可以通过其他方式表达我的尊重!! ;)
【解决方案2】:

这是一个关于如何从 URL 中提取参数的示例。

现在如何在用户交互表单 (UI) 上使用它们由您决定。

// Use this to get the document location:
var ActualURL = document.location.href;
console.log("This snippet URL: "+ActualURL);


// Only for this demo, I "simulate" a URL.
// ActualURL is overwritten here.
var ActualURL = "www.example.com/?param%5B%5D=A&param%5B%5D=B";
console.log("FAKED URL: "+ActualURL);

var domain = ActualURL.split("?")[0];
console.log("Domain: "+domain);

var params = ActualURL.split("?")[1];

var param_array = params.split("&");

for (i=0;i<param_array.length;i++){
  console.log( "Param #"+i+": "+param_array[i] );
}

console.log("Rebuilted URL with only param #2: "+domain+"?"+param_array[1]);

【讨论】:

  • 非常感谢。问题是我不知道所需参数的数组索引。我只知道价值。例如:param[]=A,可以是 index=1 或 index=2 或 3 。 ...我们应该用正则表达式搜索它,寻找A
  • 我的意思是param[]=A的位置可能不同,例如:www.example.com/?test=2112&amp;test2=2&amp;param[]=E&amp;param[]=A&amp;param[]=B
  • 我明白了...但这没关系。您在 cmets 中说过 «用户应该能够通过单击每个参数的 x 关闭按钮在浏览器中执行此操作»。因此,将它们全部显示为每个复选框......并且,在提交时,使用用户选择的内容重建 URL。顺序真的不重要。
  • 但表单并不完全由复选框组成。还有一些其他的 input[text] 字段,用户可以输入然后单击提交按钮。其他输入可以改变param[]=A的位置!我不知道我是否应该使用param_array[1] OR param_array[2] OR ...
  • 只希望在用户更改其中一个复选框时自动提交表单
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
相关资源
最近更新 更多