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.