Eu gostaria de obter o valor após um hash no URL da página atual e poder aplicar isso em uma nova função ... por exemplo.
O URL pode ser
www.example.com/index.html#foo
E eu gostaria de usar isso em conjunto com o seguinte trecho de código
$('ul#foo:first').show();
Estou assumindo / esperando que exista alguma maneira de capturar isso e transformá-lo em uma variável que eu possa usar no segundo trecho de código.
jquery
url
hash
fragment-identifier
Robbie White
fonte
fonte
'ul#foo:first'
não faz sentido, pois os IDs devem ser únicos, portanto, adicionar:first
ao seletor é redundante, a menos que você esteja duplicando IDs inválidos. Observe que, mesmo uma década atrás, os IDs repetidos ainda eram inválidos.Respostas:
Você pode usar a
location.hash
propriedade para obter o hash da página atual:Observe que essa propriedade já contém o
#
símbolo no início.Na verdade, você não precisa do
:first
pseudo-seletor, pois está usando o seletor de ID ; pressupõe-se que os IDs sejam únicos no DOM.Caso deseje obter o hash de uma string de URL, você pode usar o
String.substring
método:Conselho: Esteja ciente de que o usuário pode alterar o hash como ele deseja, injetando qualquer coisa no seu seletor; você deve verificar o hash antes de usá-lo.
fonte
var hash = location.hash.slice(1); $('ul.item'+hash).show().append($('#content'));
isso executará uma tag de script inserida no hash. É um bom hábito usar em$('body').find('ul'+hash+':first')
vez de$('ul'+hash+':first')
.var hash = location.hash.replace('#', '');
$(userInput)
geralmente não é seguro porque$
está sobrecarregado e pode procurar nós existentes ou criar novos, dependendo se a string contém<>
caracteres.$(document).find(userInput)
sempre procurará por nós existentes, para que seja menos perigoso. Dito isso, a melhor prática é sempre limpar a entrada do usuário, por exemplo, se você usar IDs alfanuméricos, verifique se é alfanumérico.location.hash não é seguro para o IE , no caso do IE (incluindo o IE9), se sua página contiver iframe, após a atualização manual do conteúdo do iframe obter o valor location.hash é antigo (valor para o carregamento da primeira página). enquanto o valor recuperado manual é diferente de location.hash, sempre o recupere através de document.URL
fonte
Para quem procura uma solução javascript pura
Espero que isso poupe algum tempo.
fonte
Desde o jQuery 1.9, o
:target
seletor corresponderá ao hash da URL. Então você poderia fazer:O que selecionaria o elemento com o ID correspondente ao hash e o mostraria.
fonte
:target
como uma string? Se sim, não acredito.Eu sugeriria melhor cek primeiro se a página atual tiver um hash. Caso contrário, será
undefined
.fonte
Estou usando isso para resolver as implicações de segurança observadas na resposta do @ CMS.
fonte