2013-10-23 30 views
4

我的默認網址會像在網址替換參數和刷新頁面

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

而且我有一個下拉的各種文件名列表,我希望通過單擊下拉列表,以取代參數sample
對於每一項更改,都應該使用現有參數更改URL。

我試過之後,

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

但它不會替換文件名。

+0

location.href = location.href.replace(/ sample /,「filename」) – Reeno

+0

@Reeno這可能很好,但對於下一個文件選擇...? – Hulk1991

+0

你想替換'?file = sample'嗎? –

回答

6

一種方法是:

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

但是當你有?後一個參數這隻會工作。如果你有更多 - 你需要解析它們並重新申請。

+1

'location.host'沒有協議,您可以使用'location.origin'('http:// example.com'而不是'example .com') –

+0

@ SamvanKampen我錯過了!非常感謝! – tborychowski

+1

@tborychowski謝謝你的工作... – Hulk1991

9

你可以試試這個:

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

location.search財產僅保留查詢 URL的一部分,所以你不必擔心URL的任何其他部分(如域或哈希)會被修改。
此外,正則表達式將只替換file參數。當你在查詢中有一些其他參數時,這很有用。

+1

這實際上是一個非常優雅的方式,因爲它會自動重新加載,並且不需要使用整個URL。 – silent

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; 
} 
1

歡迎2018沒有現成的參數,可以現在就可以使用mostlyURLSearchParams處理解析也正在和更換你

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

URLSearchParams將根據需要替換或添加參數到查詢字符串。