221 votes

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

J'ai une URL qui ressemble à :

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

Comment puis-je obtenir le a_1 la valeur de l'ancre en utilisant jQuery et en la stockant comme une variable ?

565voto

Silvio Delgado Points 1650

Pour fenêtre actuelle vous pouvez utiliser ceci :

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

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

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

Si vous avez une chaîne avec un URL/hash, 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 votes

Réponse élégante. Y a-t-il des cas dans lesquels cela ne fonctionne pas ?

2 votes

Version raccourcie - var hash = window.location.hash.substr(1); à cause d'un JS ont les deux fonctions substr/substring, ils sont différents, mais dans ce cas la même.

0 votes

Quelle est la meilleure façon de suivre les changements de ce type, par exemple si quelqu'un a cliqué sur un lien interne à la page ?

218voto

Nick Craver Points 313913

Vous pouvez utiliser le .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 si elle ne dispose pas d'une # dans celui-ci, faites un if(url.indexOf("#") != -1) vérifiez comme ceci :

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

Si c'est le actuel vous pouvez simplement utiliser window.location.hash pour l'obtenir, et remplacer le # si vous le souhaitez.

11 votes

Remarque : pour obtenir la valeur de hachage de la fenêtre principale à l'intérieur d'une iFrame, vous devez utiliser la commande suivante window.top.location.hash à la place.

2 votes

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

78voto

Real Points 151

Utilisez

window.location.hash

pour récupérer tout ce qui est au-delà et y compris le #.

19 votes

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

41voto

Valentin E Points 370

Style jQuery :

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

7 votes

Tous les problèmes de javascript ne doivent pas être résolus avec jquery.

31 votes

@doxin Je suis d'accord mais la question est "Comment obtenir l'ancre à partir de l'URL en utilisant jQuery ?".

12voto

David Murdoch Points 28521

Vous pouvez utiliser l'"astuce" suivante pour analyser les données tout URL valide. Il tire parti de la fonction élément d'ancrage La propriété spéciale de la href, 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 simple

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X