Obtenir L'emplacement de hachage D'URL, et l'utiliser dans jQuery

Je voudrais obtenir la valeur après un hachage dans l'URL de la page en cours, puis pouvoir l'appliquer dans une nouvelle fonction... par exemple.

L'URL peut être

www.example.com/index.html#foo

Et je voudrais l'utiliser en conjonction avec le morceau de code suivant

$('ul#foo:first').show();

Je suppose/espère qu'il existe un moyen de saisir cela, et de le transformer en une variable que je peux ensuite utiliser dans le deuxième morceau de code.

121
demandé sur j08691 2009-12-01 00:44:00

5 réponses

Note de L'éditeur: l'approche ci-dessous a de graves implications en matière de sécurité et, selon la version de jQuery que vous utilisez, peut exposer vos utilisateurs à des attaques XSS. Pour plus de détails, voir la discussion de l'attaque possible dans les commentaires sur cette réponse ou cette explication sur Security Stack Exchange.

Vous pouvez utiliser le location.hash propriété pour prendre le hachage de la page en cours:

var hash = window.location.hash;
$('ul'+hash+':first').show();

Notez que cette la propriété contient déjà le symbole # Au début.

En fait, vous n'avez pas besoin du pseudo-sélecteur :firstpuisque vous utilisez le sélecteur ID, est supposé que les ID sont uniques dans le DOM.

Si vous voulez obtenir le hachage d'une chaîne D'URL, vous pouvez utiliser String.substring méthode:

var url = "http://example.com/file.htm#foo";
var hash = url.substring(url.indexOf('#')); // '#foo'

Conseil: sachez que l'utilisateur peut changer le hachage comme il le veut, en injectant n'importe quoi à votre sélecteur, vous devriez vérifier le hachage avant de l'utiliser.

255
répondu CMS 2017-11-19 00:14:45

Emplacement.hash n'est pas sûr pour IE , dans le cas D'IE (y compris IE9 ) , si votre page contient iframe , puis après actualisation manuelle dans le contenu iframe obtenir l'emplacement.la valeur de hachage est ancienne( valeur pour le chargement de la première page). alors que la valeur récupérée manuelle est différente de l'emplacement.hash donc toujours le récupérer à travers le document.URL

var hash = document.URL.substr(document.URL.indexOf('#')+1) 
30
répondu Deepak Patil 2012-12-04 12:52:46

Pour ceux qui recherchent une solution javascript pure

 document.getElementById(location.hash.substring(1)).style.display = 'block'

J'espère que cela vous fera gagner du temps.

2
répondu Matas Vaitkevicius 2016-06-13 10:49:15

Je suggérerais mieux cek d'abord si la page actuelle a un hachage. Sinon, ce sera undefined.

$(window).on('load', function(){        
    if( location.hash && location.hash.length ) {
       var hash = decodeURIComponent(location.hash.substr(1));
       $('ul'+hash+':first').show();;
    }       
});
0
répondu Chetabahana 2018-05-15 16:37:47

Depuis jquery 1.9, le :target le sélecteur correspondra au hachage de L'URL. Donc, vous pouvez faire:

$(":target").show(); // or $("ul:target").show();

Qui sélectionnerait l'élément avec L'ID correspondant au hachage et le montrerait.

0
répondu j08691 2018-10-03 17:39:06