Como obtenho o último segmento de um URL? Eu tenho o seguinte script que exibe o URL completo da marca âncora clicada:
$(".tag_name_goes_here").live('click', function(event)
{
event.preventDefault();
alert($(this).attr("href"));
});
Se o URL for
http://mywebsite/folder/file
como faço para exibir apenas a parte "arquivo" do URL na caixa de alerta?
javascript
jquery
oshirowanen
fonte
fonte
Respostas:
Você também pode usar a função lastIndexOf () para localizar a última ocorrência do
/
caractere em sua URL e, em seguida, a função substring () para retornar a substring a partir desse local:Dessa forma, você evitará a criação de uma matriz que contenha todos os seus segmentos de URL
split()
.fonte
admin/store/tour/-1/
assim, será''
string?/
no final?/
no final:var url = window.location.href.replace(/\/$/, ''); /* remove optional end / */ var lastSeg = url.substr(url.lastIndexOf('/') + 1);
fonte
http://mywebsite/folder/file/
"" == false
, nesse caso, aparece a parte da matriz com a cadeia vaziafonte
/
.console.log(history.location.pathname.split("/").pop())
Se existe uma maneira melhor, eu gostaria de saber! Espero que este comentário possa levar mais pessoas à sua resposta. Obrigado @ Dblock247.../file?var=value&foo=bar
). Esta solução resolve esse problema de uma maneira mais robusta e moderna: stackoverflow.com/a/51795122/1123743Apenas outra solução com regex.
fonte
Javascript tem a divisão de função associada ao objeto string que pode ajudá-lo:
fonte
As outras respostas podem funcionar se o caminho for simples, consistindo apenas em elementos simples do caminho. Mas quando também contém parâmetros de consulta, eles quebram.
Melhor usar o objeto URL para isso em vez de obter uma solução mais robusta. É uma interpretação analisada do URL atual:
Entrada:
const href = 'https://stackoverflow.com/boo?q=foo&s=bar'
Resultado:
'boo'
Isso funciona para todos os navegadores comuns. Somente nosso IE moribundo não suporta isso (e não apoia). No entanto, para o IE, há um polyfills disponível (se você se importa ).
fonte
Ou você pode usar uma expressão regular:
fonte
alert(window.location.href.replace(/\/$/, '').replace(/.*//, ''))
fonte
Eu sei, é tarde demais, mas para os outros: I altamente recomendado o uso PURL plugin jQuery . A motivação para PURL é que o URL também pode ser segmentado por '#' (exemplo: links angular.js), ou seja, o URL pode parecer
ou
E com o PURL, você pode decidir facilmente (segmento / segmento) qual segmento você deseja obter.
Para o último segmento "clássico", você pode escrever:
fonte
Com base na resposta de Frédéric usando apenas javascript:
fonte
Além disso,
fonte
Se você não estiver preocupado em gerar os elementos extras usando a divisão, o filtro poderá resolver o problema mencionado na barra final (supondo que você tenha suporte do navegador para filtro).
fonte
targetValue = one
Se o seu URL se parecer com:
ou
ou
Em seguida, loc acaba parecendo: http://test.com/one
Agora, como você deseja o último item, execute a próxima etapa para carregar o valor (targetValue) desejado originalmente.
fonte
search
ouhash
.Use a
pathname
propriedade nativa porque é mais simples e já foi analisada e resolvida pelo navegador.$(this).attr("href")
pode retornar valores como o../..
que não daria o resultado correto.Se você precisar manter o
search
ehash
(por exemplo,foo?bar#baz
dehttp://quux.com/path/to/foo?bar#baz
), use isto:fonte
pathname
remove os parâmetros de consulta, mashref
não o faz.Para obter o último segmento da sua janela atual:
window.location.href.substr(window.location.href.lastIndexOf('/') +1)
fonte
você pode remover primeiro se houver / no final e obter a última parte do URL
fonte
Retorna o último segmento, independentemente das barras finais:
fonte
path.sep
não uma barra literal. Consulte nodejs.org/api/path.html#path_path_sep . Isso manterá seu código portátil entre sistemas operacionais.Copiado desta resposta
fonte
Resposta do raddevus atualizada:
Imprime o último caminho do URL como string:
fonte
Eu acredito que é mais seguro remover a barra ('/') antes de fazer a substring. Porque eu tenho uma string vazia no meu cenário.
fonte
Estou usando regex e split:
var last_path = location.href.match (/. / (. [\ w]) /) [1] .split ("#") [0] .split ("?") [0]
No final, ele ignorará #? & / urls finais, o que acontece muito. Exemplo:
https://cardsrealm.com/profile/cardsRealm -> Retorna cardsRealm
https://cardsrealm.com/profile/cardsRealm#hello -> Retorna cardsRealm
https://cardsrealm.com/profile/cardsRealm?hello -> Retorna cardsRealm
https://cardsrealm.com/profile/cardsRealm/ -> Retorna cardsRealm
fonte
Realmente não sei se a regex é a maneira correta de resolver esse problema, pois pode realmente afetar a eficiência do seu código, mas a regex abaixo ajudará você a buscar o último segmento e ainda fornecerá o último segmento, mesmo que o URL é seguido por um vazio
/
. O regex que eu criei é:fonte
Funciona para mim.
fonte
Eu sei que é antigo, mas se você deseja obter isso de um URL, pode simplesmente usar:
document.location.pathname
obtém o nome do caminho da URL atual.lastIndexOf
obtenha o índice da última ocorrência do seguinte Regex, no nosso caso é/.
. O ponto significa qualquer caractere, portanto, ele não contará se/
o último caractere no URL.substring
irá cortar a string entre dois índices.fonte
se o URL for
http://localhost/madukaonline/shop.php?shop=79
console.log(location.search);
vai trazer?shop=79
portanto, a maneira mais simples é usar location.search
você pode procurar mais informações aqui e aqui
fonte
Você pode fazer isso com caminhos simples (w / 0), querystrings etc.
Concedido provavelmente excessivamente complexo e provavelmente não com desempenho, mas eu queria usar
reduce
para me divertir.fonte