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 = 
cppit
la source
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);
Musa
la source
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

Ahsan Khurshid
la source
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

Talha
la source
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

Manohar Reddy Poreddy
la source
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  
});
kmario23
la source
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);
Ro Hit
la source