10

我的默认网址就像

http://localhost:4444/index.html?file=sample

我有一个包含各种文件名的下拉列表,我想sample通过单击下拉列表来替换参数。
对于每一个更改,都应使用现有参数更改 URL。

我试过以下,

location.href = location.href + "filename" ;

但它不会替换文件名。

4

4 回答 4

14

你可以试试这个:

location.search = location.search.replace(/file=[^&$]*/i, 'file=filename');

location.search属性只保存 URL 的查询部分,因此您不必担心 URL 的任何其他部分(例如域或哈希)会被修改。
此外,正则表达式将仅替换file参数。当您在query中有一些其他参数时,它很有用。

于 2013-10-23T10:13:15.973 回答
12

欢迎来到 2018,您现在可以主要使用URLSearchParams来处理您得到的解析和替换

var params = new URLSearchParams(location.search);
params.set('file', 'sample');
window.location.search = params.toString();

URLSearchParams将根据需要将参数替换或添加到查询字符串。

于 2018-01-23T21:38:32.833 回答
8

一种方法是:

location.href = location.origin + location.pathname + '?file=filename';

但这只有在?. 如果你有更多 - 你需要解析它们并重新申请。

于 2013-10-23T10:13:02.833 回答
0

我通过在没有现有参数的情况下也工作来调整@matewka 答案以使其更加健壮window.location.search

var filename = 'myFilename.csv';

var paramName = 'file';
var newParam = paramName + '=' + filename;
if(window.location.search){
  var regex = new RegExp(paramName + '=[^&$]*', 'i');
  window.location.search = window.location.search.replace(regex, newParam);
}else{
  window.location.search = newParam;
}
于 2017-07-21T20:02:23.440 回答