¿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 = 

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);

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


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


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


6

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

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

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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.