¿Cómo obtengo el identificador de fragmento (valor después del hash #) de una URL?

212

Ejemplo:

www.site.com/index.php#hello

Usando jQuery, quiero poner el valor helloen una variable:

var type = 
cppit
fuente
No estoy seguro, si esta pregunta debe seguir siendo etiquetada como jQuery y preguntar al respecto. La mayoría de las respuestas se aplican a JS sin jQuery y este parece ser un buen objetivo de engaño.
user4642212

Respuestas:

585

No hay necesidad de jQuery

var type = window.location.hash.substr(1);
Musa
fuente
154
No es suficiente jQuery! (Es broma: +1.)
nnnnnn
2
Acabo de enterarme de que un # se puede usar como 'hash' que funciona como un identificador / palabra clave en JavaScript. Impresionante
Clain Dsilva
13
También puede usar en .slice(1)lugar de lo .substr(1)que debería ofrecer un aumento modesto en el rendimiento, aunque no hace ninguna diferencia en la vida real.
devius
3
OMG, ¿cuántas veces necesitarías verificar el hash de url para hacer CUALQUIER diferencia notable? ¿Un millón? El 'aumento modesto' es una gran exageración en este contexto. :-)
konrad
37

Puede hacerlo utilizando el siguiente código:

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

VER DEMO

Ahsan Khurshid
fuente
44
Nota: indexOf no es compatible con IE8
Sebastiaan Ordelman
44
@SchalkKeun por suerte, ahora en el '18 ya casi se ha ido. Pero para aquellos que todavía tienen que lidiar con esa leyenda, deben ser conscientes de ello.
Sebastiaan Ordelman
66
Para ser honesto, IE8 es tan inseguro que todas las pasarelas de pago básicamente dejarán caer cualquier navegador que no sea compatible con TLS 1.2 la próxima semana (30 de junio de 2018), no podrá hacer pagos desde ellos. Eso hace que todos estos navegadores viejos sean inútiles para cualquier cliente de comercio electró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);

Demostración de trabajo en jsfiddle

Talha
fuente
La ifdeclaración se puede acortar a var hash = type[1] || "";.
user4642212
6

Tenía la URL del tiempo de ejecución, a continuación di la respuesta correcta:

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

espero que esto ayude

Manohar Reddy Poreddy
fuente
6

Es muy fácil. Prueba el siguiente código

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

Basado en el código de AK, aquí hay una función 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
fuente