Como obtenho o identificador de fragmento (valor após o hash #) de um URL?


211

Exemplo:

www.site.com/index.php#hello

Usando jQuery, quero colocar o valor helloem uma variável:

var type = …

Não tenho certeza se essa pergunta deve continuar sendo marcada como jQuery e perguntando sobre ela. A maioria das respostas se aplica a JS sem jQuery e isso parece ser um bom alvo para enganar.
— user4642212

Respostas:


585

Não há necessidade de jQuery

var type = window.location.hash.substr(1);

154
Não é suficiente jQuery! (Brincadeirinha: +1.)
— nnnnnn

2
Acabei de aprender que um # pode ser usado como 'hash', que funciona como um identificador / palavra-chave em JavaScript. Impressionante
— Clain Dsilva

13
Você também pode usar em .slice(1)vez do .substr(1)que deve oferecer um aumento modesto no desempenho, embora isso não faça diferença na vida real.
— Devius

3
OMG, quantas vezes você precisa verificar o hash do URL para fazer QUALQUER diferença perceptível? Um milhão? 'Aumento modesto' é um enorme exagero neste contexto. :-)
— konrad

37

Você pode fazer isso usando o seguinte código:

var url = "www.site.com/index.php#hello";
var hash = url.substring(url.indexOf('#')+1);
alert(hash);

VER DEMO


4
Nota: indexOf não é suportada pelo IE8
— Sebastiaan Ordelman

4
@SchalkKeun, felizmente, agora em 18 está quase acabando. Mas para aqueles que ainda precisam lidar com essa lenda devem estar cientes disso.
— Sebastiaan Ordelman

6
Para ser honesto, o IE8 é tão inseguro, basicamente todos os gateways de pagamento eliminam qualquer navegador que não suporte o TLS 1.2 na próxima semana (30 de junho de 2018), você não poderá efetuar pagamentos deles. Isso torna todos esses navegadores ruins e inúteis para qualquer cliente de comércio eletrônico.
— Schalk Keun

13
var url ='www.site.com/index.php#hello';
var type = url.split('#');
var hash = '';
if(type.length > 1)
  hash = type[1];
alert(hash);

Demonstração de trabalho no jsfiddle


A ifdeclaração pode ser abreviada para var hash = type[1] || "";.
— user4642212


6

Eu tinha o URL do tempo de execução, abaixo deu a resposta correta:

let url = "www.site.com/index.php#hello";
alert(url.split('#')[1]);

espero que isto ajude


6

É muito fácil. Experimente o código abaixo

$(document).ready(function(){
  var hashValue = location.hash.replace(/^#/, '');  
  //do something with the value here  
});

3
var hashValue = location.hash.replace (/ ^ # /, '');
— flakerimi

3

Baseado no código da AK, aqui está uma função auxiliar. JS Fiddle Here ( http://jsfiddle.net/M5vsL/1/ ) ...

// Helper Method Defined Here.
(function (helper, $) {
    // This is now a utility function to "Get the Document Hash"
    helper.getDocumentHash = function (urlString) {
        var hashValue = "";

        if (urlString.indexOf('#') != -1) {
            hashValue = urlString.substring(parseInt(urlString.indexOf('#')) + 1);
        }
        return hashValue;
    };
})(this.helper = this.helper || {}, jQuery);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.