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.