什么是从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