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 = 
cppit
fonte
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);
musa
fonte
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

Ahsan Khurshid
fonte
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

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

Use o seguinte JavaScript para obter o valor após o hash (#) de um URL. Você não precisa usar o jQuery para isso.

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

Eu tenho esse código e tutorial aqui - Como obter valor de hash da URL usando JavaScript

JoyGuru
fonte
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

Manohar Reddy Poreddy
fonte
6

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

$(document).ready(function(){
  var hashValue = location.hash.replace(/^#/, '');  
  //do something with the value here  
});
kmario23
fonte
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);
Ro Hit
fonte