Comment puis-je obtenir l'identifiant de fragment (valeur après le hachage #) à partir d'une URL?


212

Exemple:

www.site.com/index.php#hello

En utilisant jQuery, je veux mettre la valeur hellodans une variable:

var type = 

Je ne sais pas si cette question doit rester marquée comme jQuery et poser des questions à ce sujet. La plupart des réponses s'appliquent à JS sans jQuery et cela semble être une bonne cible de dupe.
user4642212

Réponses:


585

Pas besoin de jQuery

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

154
Pas assez de jQuery! (Je plaisante: +1.)
nnnnnn

2
Je viens d'apprendre qu'un # peut être utilisé comme «hachage» qui fonctionne comme identifiant / mot-clé en JavaScript. Génial
Clain Dsilva

13
Vous pouvez également utiliser .slice(1)au lieu de .substr(1)cela devrait offrir une augmentation modeste des performances, même si cela ne fait aucune différence dans la vie réelle.
devius

3
OMG, combien de fois vous auriez besoin de vérifier le hachage d'URL pour faire TOUTE différence notable? Un million? «Une augmentation modeste» est une énorme surestimation dans ce contexte. :-)
konrad

37

Vous pouvez le faire en utilisant le code suivant:

var url = "www.site.com/index.php#hello";
var hash = url.substring(url.indexOf('#')+1);
alert(hash);

VOIR DÉMO


4
Remarque: indexOf n'est pas pris en charge par IE8
Sebastiaan Ordelman

4
@SchalkKeun heureusement, maintenant en '18, il a presque disparu. Mais pour ceux qui doivent encore faire face à cette légende, il faut en être conscient.
Sebastiaan Ordelman

6
Pour être honnête, IE8 est si peu sûr que toutes les passerelles de paiement vont abandonner tout navigateur ne prenant pas en charge TLS 1.2 la semaine prochaine (30 juin 2018), vous ne pourrez pas du tout effectuer de paiements à partir d'eux. Cela rend donc tous ces anciens navigateurs merdiques inutiles pour tout client de commerce électronique.
Schalk Keun

13
var url ='www.site.com/index.php#hello';
var type = url.split('#');
var hash = '';
if(type.length > 1)
  hash = type[1];
alert(hash);

Démo de travail sur jsfiddle


La ifdéclaration peut être raccourcie var hash = type[1] || "";.
user4642212


6

J'ai eu l'URL de l'exécution, ci-dessous a donné la bonne réponse:

let url = "www.site.com/index.php#hello";
alert(url.split('#')[1]);

J'espère que cela t'aides


6

C'est très facile. Essayez le code ci-dessous

$(document).ready(function(){
  var hashValue = location.hash.replace(/^#/, '');  
  //do something with the value here  
});

3
var hashValue = location.hash.replace (/ ^ # /, '');
flakerimi

3

Basé sur le code d'AK, voici une fonction d'assistance. JS Fiddle Here ( http://jsfiddle.net/M5vsL/1/ ) ...

// Helper Method Defined Here.
(function (helper, $) {
    // This is now a utility function to "Get the Document Hash"
    helper.getDocumentHash = function (urlString) {
        var hashValue = "";

        if (urlString.indexOf('#') != -1) {
            hashValue = urlString.substring(parseInt(urlString.indexOf('#')) + 1);
        }
        return hashValue;
    };
})(this.helper = this.helper || {}, jQuery);
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.