Удалите querystring из URL

Что простой способ состоит в том, чтобы удалить querystring из Пути в JavaScript? Я видел плагин для JQuery, который использует window.location.search. Я не могу сделать этого: URL в моем случае является переменной, которая установлена от Ajax.

var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3&SortOrder=dsc'
129
задан Mathias F 29 March 2010 в 20:18
поделиться

4 ответа

Простой способ получить это:

function getPathFromUrl(url) {
  return url.split("?")[0];
}

Для тех, кто также хочет удалить хэш (не часть оригинального вопроса) когда не существует строки запроса, это требует немного больше:

function stripQueryStringAndHashFromPath(url) {
  return url.split("?")[0].split("#")[0];
}

EDIT

@caub (первоначально @crl) предложил более простую комбинацию, которая работает и для строки запроса, и для хэша (хотя она использует RegExp, если у кого-то есть проблемы с этим):

function getPathFromUrl(url) {
  return url.split(/[?#]/)[0];
}
322
ответ дан 24 November 2019 в 00:29
поделиться

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 () , предложенный Робусто , является лучшим решением, чем тот, который я предложил ранее, поскольку он будет работать даже при отсутствии строки запроса:

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"

Оригинал Ответ:

var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3';
testURL.substring(0, testURL.indexOf('?'));    // Returns: "/Products/List"
32
ответ дан 24 November 2019 в 00:29
поделиться

Если вы используете RegEx ....

var newURL = testURL.match(new RegExp("[^?]+"))
2
ответ дан 24 November 2019 в 00:29
поделиться

Если вам нужно выполнить сложную операцию с URL-адресом, вы можете воспользоваться плагином парсера URL-адресов jQuery .

-1
ответ дан 24 November 2019 в 00:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: