Comment obtenir l'ancre de l'URL en utilisant jQuery?


184

J'ai une URL qui ressemble à:

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

Comment puis-je obtenir la a_1valeur d'ancrage à l'aide de jQuery et la stocker en tant que variable?

Réponses:


207

Vous pouvez utiliser .indexOf()et .substring(), comme ceci:

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

Vous pouvez l'essayer ici , s'il n'y #en a pas, faites une if(url.indexOf("#") != -1)vérification comme celle-ci:

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

S'il s'agit de l' URL de la page actuelle , vous pouvez simplement l'utiliser window.location.hashpour l'obtenir et le remplacer #si vous le souhaitez.


10
Remarque: pour obtenir la valeur de hachage de la fenêtre principale depuis l'intérieur d'un iFrame, vous devez utiliser à la window.top.location.hashplace.
— Paolo Stefan

1
url.split("#").pop() - Plus lent mais plus facile.
— Ifch0o1

490

Pour la fenêtre actuelle , vous pouvez utiliser ceci:

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

Pour obtenir la valeur de hachage de la fenêtre principale , utilisez ceci:

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

Si vous avez une chaîne avec une URL / hachage, la méthode la plus simple est:

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

Si vous utilisez jQuery, utilisez ceci:

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

1
Réponse élégante. Y a-t-il des cas où cela ne fonctionne pas?
— sscirrus

2
version de raccourci - en var hash = window.location.hash.substr(1);raison d'un JS ont les deux fonctions substr / substring, elles sont différentes, mais dans ce cas les mêmes.
— Arthur Kushman

quelle est la meilleure façon de suivre les changements de cela, à savoir. quelqu'un a cliqué sur un lien de page intérieure?
— Rid Iculous

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

71

Utilisation

window.location.hash

pour tout récupérer au-delà et y compris le #


15
N'oubliez pas d'utiliser location.hash.slice(1)si vous ne voulez pas la balise de hachage dans la chaîne finale!
— Sandy Gifford

39

Style jQuery:

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

7
tous les problèmes javascript ne doivent pas être résolus avec jquery.
— doxin

22
@doxin Je suis d'accord mais la question est "Comment obtenir l'ancre de l'URL en utilisant jQuery?"
— Valentin E

10

Vous pouvez utiliser l'astuce suivante pour analyser toute URL valide. Il profite de l' élément d'ancrage propriété particulière liée à href de, hash.

Avec jQuery

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

Avec JS uni

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 vous avez juste une chaîne d'url simple (et donc n'avez pas d'attribut de hachage), vous pouvez également utiliser une expression régulière:

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

1
Il faut vérifier que la correspondance obtient des résultats avant d'accéder au deuxième élément de celui-ci, sinon ce code provoquera une erreur si l'URL n'a pas d'ancrage.
— Richard Garside
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.