¿Cómo obtener el ancla de la URL usando jQuery?


184

Tengo una URL que es como:

www.example.com/task1/1.3.html#a_1

¿Cómo puedo obtener el a_1valor de anclaje usando jQuery y almacenarlo como una variable?

Respuestas:


207

Puede usar .indexOf()y .substring(), así:

var url = "www.aaa.com/task1/1.3.html#a_1";
var hash = url.substring(url.indexOf("#")+1);

Puede intentarlo aquí , si no tiene una #, haga una if(url.indexOf("#") != -1)comprobación como esta:

var url = "www.aaa.com/task1/1.3.html#a_1", idx = url.indexOf("#");
var hash = idx != -1 ? url.substring(idx+1) : "";

Si esta es la URL de la página actual , puede usarla window.location.hashpara obtenerla y reemplazarla #si lo desea.


10
Tenga en cuenta: para obtener el valor hash de la ventana principal desde el interior de un iFrame, debe usar window.top.location.hashen su lugar.
Paolo Stefan

1
url.split("#").pop() - Más lento pero más fácil.
Ifch0o1

490

Para la ventana actual , puede usar esto:

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

Para obtener el valor hash de la ventana principal , use esto:

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

Si tiene una cadena con una URL / hash, el método más fácil es:

var url = 'https://www.stackoverflow.com/questions/123/abc#10076097';
var hash = url.split('#').pop();

Si está utilizando jQuery, use esto:

var hash = $(location).attr('hash');

1
Respuesta elegante ¿Hay algún caso en el que esto no funcione?
sscirrus

2
versión de acceso directo: var hash = window.location.hash.substr(1);debido a que un JS tiene ambas funciones substr / substring, son diferentes, pero en este caso son las mismas.
Arthur Kushman

¿Cuál es la mejor manera de hacer un seguimiento de los cambios de esto, es decir. alguien hizo clic en el enlace de una página interna?
Rid Iculous

55
@RidIculous intente esto: $ (ventana) .on ('hashchange', function () {$ ('h1'). Text (location.hash.slice (1));});
Silvio Delgado

71

Utilizar

window.location.hash

para recuperar todo más allá e incluir el #


15
¡Recuerde usar location.hash.slice(1)si no desea la etiqueta hash en la cadena final!
Sandy Gifford

39

Estilo jQuery:

$(location).attr('hash');

77
No todos los problemas de JavaScript deben resolverse con jquery.
doxin

22
@doxin Estoy de acuerdo pero la pregunta es "¿Cómo obtener el ancla de la URL usando jQuery?"
Valentin E

10

Puede usar el siguiente "truco" para analizar cualquier URL válida. Se aprovecha del elemento de anclaje propiedad href relacionada con especial 's, hash.

Con jQuery

function getHashFromUrl(url){
    return $("<a />").attr("href", url)[0].hash.replace(/^#/, "");
}
getHashFromUrl("www.example.com/task1/1.3.html#a_1"); // a_1

Con simple JS

function getHashFromUrl(url){
    var a = document.createElement("a");
    a.href = url;
    return a.hash.replace(/^#/, "");
};
getHashFromUrl("www.example.com/task1/1.3.html#a_1"); // a_1

3

Si solo tiene una cadena de URL simple (y, por lo tanto, no tiene un atributo hash), también puede usar una expresión regular:

var url = "www.example.com/task1/1.3.html#a_1"  
var anchor = url.match(/#(.*)/)[1] 

1
Es necesario verificar que la coincidencia obtenga resultados antes de acceder al segundo elemento, o este código generará un error si la url no tiene ancla.
Richard Garside
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.