Последний сегмент URL
Как получить последний сегмент url-адреса? У меня есть следующий скрипт, который отображает полный url-адрес якорного тега:
$(".tag_name_goes_here").live('click', function(event)
{
event.preventDefault();
alert($(this).attr("href"));
});
если url-адрес
http://mywebsite/folder/file
Как заставить его отображать только часть "файл" url-адреса в окне предупреждения?
22 ответов
вы также можете использовать lastIndexOf() функция для обнаружения последнего вхождения /
символ в вашем URL, затем substr () функция для возврата подстроки, начиная с этого места:
window.alert(this.href.substr(this.href.lastIndexOf('/') + 1));
таким образом, вы избежите создания массива, содержащего все ваши сегменты URL, как split()
делает.
var parts = 'http://mywebsite/folder/file'.split('/');
var lastSegment = parts.pop() || parts.pop(); // handle potential trailing slash
console.log(lastSegment);
просто еще одно решение с регулярным выражением.
var href = location.href;
console.log(href.match(/([^\/]*)\/*$/)[1]);
Javascript имеет функцию split, связанную со строковым объектом, которая может вам помочь:
var url = "http://mywebsite/folder/file";
var array = url.split('/');
var lastsegment = array[array.length-1];
Я знаю, уже слишком поздно, но для других: Я!--4-->очень рекомендации по применению плагин PURL jquery. Мотивация для PURL заключается в том, что url-адрес может быть сегментирован '#' too (пример: угловой.JS links), т. е. url может выглядеть как
http://test.com/#/about/us/
или
http://test.com/#sky=blue&grass=green
и с PURL вы можете легко решить (сегмент / fsegment), какой сегмент вы хотите получить.
для "классического" последнего сегмента вы можете написать:
var url = $.url('http://test.com/dir/index.html?key=value');
var lastSegment = url.segment().pop(); // index.html
основываясь на ответе Фредерика, используя только javascript:
var url = document.URL
window.alert(url.substr(url.lastIndexOf('/') + 1));
Если вы не беспокоитесь о создании дополнительных элементов с помощью split, то фильтр может справиться с проблемой, которую вы упомянули о конечной косой черте (при условии, что у вас есть поддержка браузера для фильтра).
url.split('/').filter(function (s) { return !!s }).pop()
// Store original location in loc like: http://test.com/one/ (ending slash)
var loc = location.href;
// If the last char is a slash trim it, otherwise return the original loc
loc = loc.lastIndexOf('/') == (loc.length -1) ? loc.substr(0,loc.length-1) : loc.substr(0,loc.lastIndexOf('/'));
var targetValue = loc.substr(loc.lastIndexOf('/') + 1);
targetValue = one
Если Ваш url выглядит так:
или
или
тогда loc в конечном итоге выглядит так: http://test.com/one
теперь, так как вы хотите последний элемент, запустите следующий шаг для загрузки значения (targetValue), которое вы изначально хотели.
var targetValue = loc.substr(loc.lastIndexOf('/') + 1);
window.alert(this.pathname.substr(this.pathname.lastIndexOf('/') + 1));
используйте уроженца pathname
свойство, потому что оно самое простое и уже было проанализировано и разрешено браузером. $(this).attr("href")
может возвращать значения типа ../..
, который не даст вам правильный результат.
Если вам нужно сохранить search
и hash
(например,foo?bar#baz
С http://quux.com/path/to/foo?bar#baz
) использовать это:
window.alert(this.pathname.substr(this.pathname.lastIndexOf('/') + 1) + this.search + this.hash);
var pathname = window.location.pathname; // Returns path only
var url = window.location.href; // Returns full URL
скопировал из ответ
чтобы получить последний сегмент текущего окна:
window.location.href.substr(window.location.href.lastIndexOf('/') +1)
обновленный raddevus ответ:
var loc = window.location.href;
loc = loc.lastIndexOf('/') == loc.length - 1 ? loc.substr(0, loc.length - 1) : loc.substr(0, loc.length + 1);
var targetValue = loc.substr(loc.lastIndexOf('/') + 1);
печатает последний путь url как строку:
test.com/path-name = path-name
test.com/path-name/ = path-name
Я считаю, что безопаснее удалить косую черту хвоста ('/ ' ) перед выполнением подстроки. Потому что в моем сценарии пустая строка.
window.alert((window.location.pathname).replace(/\/$/, "").substr((window.location.pathname.replace(/\/$/, "")).lastIndexOf('/') + 1));
Я использую regex и split:
var last_path = местоположение.хреф.спичка./(/(.[\w])/) [1].split ("# " ) [0].сплит("?")[0]
В конце концов он будет игнорировать # ? & / окончание URL-адресов, что часто случается. Пример:
https://cardsrealm.com/profile/cardsRealm - > возвращает cardsRealm
https://cardsrealm.com/profile/cardsRealm#hello -> возвращает cardsRealm
https://cardsrealm.com/profile/cardsRealm?hello - > возвращает cardsRealm
https://cardsrealm.com/profile/cardsRealm/ - > возвращает cardsRealm
вы можете сначала удалить, если есть / в конце, а затем получить последнюю часть URL-адреса
let locationLastPart = window.location.pathname
if (locationLastPart.substring(locationLastPart.length-1) == "/") {
locationLastPart = locationLastPart.substring(0, locationLastPart.length-1);
}
locationLastPart = locationLastPart.substr(locationLastPart.lastIndexOf('/') + 1);
ответы выше могут работать, если путь прост, состоящий только из простых элементов пути. Но когда он также содержит параметры запроса, они ломаются.
лучше использовать URL-адресом
это чувствует себя немного чище:
var url = 'http://mywebsite/folder/file';
var lastSegment = url.split('/').slice(-1).join();
console.log(lastSegment);
Я действительно не знаю, является ли регулярное выражение правильным способом решения этой проблемы, поскольку оно действительно может повлиять на эффективность вашего кода, но приведенное ниже регулярное выражение поможет вам получить последний сегмент, и оно все равно даст вам последний сегмент, даже если URL-адрес сопровождается пустым /
. Регулярное выражение, которое я придумал:
[^\/]+[\/]?$