Come ottenere l'ancoraggio dall'URL usando jQuery?


184

Ho un URL simile a:

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

Come posso ottenere il a_1valore di ancoraggio usando jQuery e memorizzarlo come variabile?

Risposte:


207

Puoi usare il .indexOf()e .substring(), in questo modo:

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

Puoi provarlo qui , se potrebbe non averne uno #, fai un if(url.indexOf("#") != -1)controllo come questo:

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

Se questo è l' URL della pagina corrente , puoi semplicemente usarlo window.location.hashper ottenerlo e, #se lo desideri , sostituiscilo .


10
Nota: per ottenere il valore hash della finestra principale dall'interno di un iFrame, è necessario utilizzare window.top.location.hashinvece.
— Paolo Stefan,

1
url.split("#").pop() - Più lento ma più facile.
— Ifch0o1

490

Per la finestra corrente , puoi usare questo:

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

Per ottenere il valore hash della finestra principale , utilizzare questo:

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

Se hai una stringa con un URL / hash, il metodo più semplice è:

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

Se stai usando jQuery, usa questo:

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

1
Risposta elegante. Ci sono casi in cui questo non funziona?
— sscirrus,

2
versione scorciatoia - a var hash = window.location.hash.substr(1);causa di un JS hanno entrambe le funzioni substr / substring, sono diverse, ma in questo caso uguali.
— Arthur Kushman,

qual è il modo migliore per tenere traccia dei cambiamenti di questo, ad es. qualcuno ha cliccato su un link all'interno della pagina?
— Elimina Iculous

5
@RidIculous prova questo: $ (window) .on ('hashchange', function () {$ ('h1'). Text (location.hash.slice (1));});
— Silvio Delgado,

71

Uso

window.location.hash

per recuperare tutto oltre e incluso il #


15
Ricorda di usare location.hash.slice(1)se non vuoi il tag hash nella stringa finale!
— Sandy Gifford,

39

stile jQuery:

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

7
non tutti i problemi di JavaScript devono essere risolti con jquery.
— doxin,

22
@doxin Sono d'accordo, ma la domanda è "Come ottenere l'ancoraggio dall'URL usando jQuery?"
— Valentin E

10

È possibile utilizzare il seguente "trucco" per analizzare qualsiasi URL valido. Si avvale del elemento di ancoraggio proprietà href relative speciale '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 semplice 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

Se hai solo una semplice stringa url (e quindi non hai un attributo hash) puoi anche usare un'espressione regolare:

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

1
È necessario verificare che la corrispondenza ottenga risultati prima di accedere al secondo elemento di esso, altrimenti questo codice genererà un errore se l'URL non ha ancora.
— Richard Garside,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.