什麼是從Javascript中的路徑中刪除查詢字符串的簡單方法? 我看到了一個使用window.location.search的Jquery插件。我不能那樣做:我的例子中的URL是一個從AJAX設置的變量。從URL中刪除查詢字符串
var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3&SortOrder=dsc'
什麼是從Javascript中的路徑中刪除查詢字符串的簡單方法? 我看到了一個使用window.location.search的Jquery插件。我不能那樣做:我的例子中的URL是一個從AJAX設置的變量。從URL中刪除查詢字符串
var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3&SortOrder=dsc'
一個簡單的方法來獲得,這是:
function getPathFromUrl(url) {
return url.split("?")[0];
}
對於那些誰也希望刪除哈希(不是原來的問題的一部分)當沒有查詢字符串存在,這需要一點點更多:
function stripQueryStringAndHashFromPath(url) {
return url.split("?")[0].split("#")[0];
}
編輯
@caub(原@crl)提出了一個簡單的組合,對於這兩種查詢字符串和哈希作品(儘管它使用正則表達式,如果任何人有這樣的問題):
function getPathFromUrl(url) {
return url.split(/[?#]/)[0];
}
+1 ...在這種情況下,實際上split()比substring()更好。 – 2010-03-29 20:42:52
但是,我還發現substring()方法與split()方法相比快近兩倍。 (在Firefox 3.6中)。 – 2010-03-29 21:23:29
邊緣優化如果很重要(可能不是):'split('?',1)[0]'。 – bobince 2010-03-29 22:56:54
月2日更新:在試圖提供一個全面的答案,我在標杆的各種答案提出的三種方法。
var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3';
var i;
// Testing the substring method
i = 0;
console.time('10k substring');
while (i < 10000) {
testURL.substring(0, testURL.indexOf('?'));
i++;
}
console.timeEnd('10k substring');
// Testing the split method
i = 0;
console.time('10k split');
while (i < 10000) {
testURL.split('?')[0];
i++;
}
console.timeEnd('10k split');
// Testing the RegEx method
i = 0;
var re = new RegExp("[^?]+");
console.time('10k regex');
while (i < 10000) {
testURL.match(re)[0];
i++;
}
console.timeEnd('10k regex');
結果在Firefox 3.5.8在Mac OS X 10.6.2:
10k substring: 16ms
10k split: 25ms
10k regex: 44ms
結果在Chrome 5.0.307.11在Mac OS X 10.6.2:
10k substring: 14ms
10k split: 20ms
10k regex: 15ms
注子字符串方法的功能比較差,因爲如果URL不包含查詢字符串,它將返回空字符串。如預期的那樣,其他兩種方法將返回完整的URL。不過有趣的是,子串方法是最快的,特別是在Firefox中。
1日更新:其實split()方法suggested by Robusto是一個更好的解決方案,在一個我前面建議的,因爲即使在沒有查詢字符串它會工作:
var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3';
testURL.split('?')[0]; // Returns: "/Products/List"
var testURL2 = '/Products/List';
testURL2.split('?')[0]; // Returns: "/Products/List"
Original Answer:
var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3';
testURL.substring(0, testURL.indexOf('?')); // Returns: "/Products/List"
如果您需要對URL執行復雜的操作,您可以看看jQuery url parser plugin。
如果你到正則表達式。 ...
var newURL = testURL.match(new RegExp("[^?]+"))
一個簡單的方法是你可以做如下
public static String stripQueryStringAndHashFromPath(String uri) {
return uri.replaceAll(("(\\?.*|\\#.*)"), "");
}
var path = "path/to/myfile.png?foo=bar#hash";
console.log(
path.replace(/(\?.*)|(#.*)/g, "")
);
如果使用骨幹。JS(其含有url anchor
如路線),URL query string
可能會出現:
之前url anchor
:
var url = 'http://example.com?a=1&b=3#routepath/subpath';
url anchor
後:
var url = 'http://example.com#routepath/subpath?a=1&b=3';
解決方案:
window.location.href.replace(window.location.search, '');
// run as: 'http://example.com#routepath/subpath?a=1&b=3'.replace('?a=1&b=3', '');
這可能是一個老問題,但我已經試過這種方法來刪除查詢參數。似乎工作順利,因爲我需要重新加載以及刪除查詢參數。
window.location.href = window.location.origin + window.location.pathname;
此外,因爲我使用簡單的字符串加法操作,我猜測性能會很好。但仍然值得與片段比較this answer
可能的重複[如何從JavaScript中刪除哈希window.location(URL)沒有頁面刷新?](https://stackoverflow.com/questions/1397329/how-to - 刪除哈希從窗口位置網址與JavaScript的無頁面r) – PayteR 2017-09-10 12:54:44