附加到网址并刷新页面


Answers:


162

这应该工作(未经测试!)

var url = window.location.href;    
if (url.indexOf('?') > -1){
   url += '&param=1'
}else{
   url += '?param=1'
}
window.location.href = url;

1
str.search(regex)比srt.indexOf(str2)更快
xavierm02

1
而且,您应该提供一个带有变量名和带有encodeURIComponent()的变量参数的ull示例。
xavierm02 2011年

而> -1的insteand,则应使用!== -1
xavierm02

8
一个跟进此事,如何添加一些逻辑,如果该参数已经存在于url中,我将更新其值而不是添加新的参数?
业余时间

1
这需要锚(哈希值)关闭的URL,如果它存在,@amateur你可以发现,确实,这里的函数:stackoverflow.com/questions/486896/...
道格·莫利纳

143

这样做比接受的答案短,但要保持简单:

window.location.search += '&param=42';

我们不必更改整个URL,只需更改查询字符串(即位置的搜索属性)即可。

当您为搜索属性分配值时,浏览器会自动插入问号并重新加载页面。


11
对于您知道这将是唯一参数的情况,您也可以设置搜索而不是附加到它:window.location.search = '?param=42';
Dave DuPlantis

1
很好!!正确,最简单和优化的方式;应该是公认的答案。
罗希特(Rohit)

如果您的网址是:www.mysite.com ...那么将不会生成网址:www.mysite.com&param = 42,该网址需要“?” 字符,因为它是网址中的唯一参数。我喜欢@Shlomi Komemi的答案,因为它涵盖了这两种主要情况。
国王

1
将参数添加到location的搜索属性时,@ greaterKing浏览器会添加问号。在浏览器控制台中尝试。
Bo Frederiksen

1
我的坏@BoFrederiksen您确实是正确的...对此感到抱歉。粗略的“ + =“ ...忽略了这一点。向我+1。
国王

70

此处的大多数答案都建议将参数附加到URL,例如以下代码段或类似的变体:

location.href = location.href + "&parameter=" + value;

在大多数情况下,这将非常有效。

然而

我认为这不是将参数附加到URL的正确方法。

由于建议的方法不会测试URL中是否已经设置了参数,因此如果不小心,可能会得到一个很长的URL,并且该参数重复多次。即:

https://stackoverflow.com/?&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1

这是问题开始的地方。建议的方法可能并且将在刷新多个页面后创建一个非常长的URL,从而使URL无效。单击此链接以获取有关长URL的更多信息。不同浏览器中URL的最大长度是多少?

这是我建议的方法:

function URL_add_parameter(url, param, value){
    var hash       = {};
    var parser     = document.createElement('a');

    parser.href    = url;

    var parameters = parser.search.split(/\?|&/);

    for(var i=0; i < parameters.length; i++) {
        if(!parameters[i])
            continue;

        var ary      = parameters[i].split('=');
        hash[ary[0]] = ary[1];
    }

    hash[param] = value;

    var list = [];  
    Object.keys(hash).forEach(function (key) {
        list.push(key + '=' + hash[key]);
    });

    parser.search = '?' + list.join('&');
    return parser.href;
}

使用此功能,只需执行以下操作:

location.href = URL_add_parameter(location.href, 'param', 'value');

1
为什么不只使用:if(window.location.search.indexOf('&param=') == -1) {window.location.search += '&param=1';}
538ROMEO,2016年

@SébastienGarcia-Roméo是的,这是一种有趣的方法,并且确实有效,但是,以这种方式对函数进行编程有两个原因。1.消除现有重复参数。2.覆盖现有参数的值。从这个角度来看,现在使用indexOf可能会给代码带来不必要的复杂性。
yeyo


2
function gotoItem( item ){
    var url = window.location.href;
    var separator = (url.indexOf('?') > -1) ? "&" : "?";
    var qs = "item=" + encodeURIComponent(item);
    window.location.href = url + separator + qs;
}

更多兼容版本

function gotoItem( item ){
    var url = window.location.href;    
    url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item);
    window.location.href = url;
}

1

请检查以下代码:

/*Get current URL*/    
var _url = location.href; 
/*Check if the url already contains ?, if yes append the parameter, else add the parameter*/
_url = ( _url.indexOf('?') !== -1 ) ? _url+'&param='+value : _url+'?param='+value;
/*reload the page */
window.location.href = _url;

1

上面@yeyo的周到答案的一个小错误修复。

更改:

var parameters = parser.search.split(/\?|&/);

至:

var parameters = parser.search.split(/\?|&amp;/);


请在评论中发布此类更正或提出建议并进行编辑。他们不保证单独的答案。
JJ透明和莫妮卡,

1

试试这个

var url = ApiUrl(`/customers`);
  if(data){
   url += '?search='+data; 
  }
  else
  { 
      url +=  `?page=${page}&per_page=${perpage}`;
  }
  console.log(url);

0

也:

window.location.href += (window.location.href.indexOf('?') > -1 ? '&' : '?') + 'param=1'

希洛米(Shlomi)的一支衬纸可在书签中使用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.