Come posso ottenere l'identificatore di frammento (valore dopo l'hash #) da un URL?


212

Esempio:

www.site.com/index.php#hello

Usando jQuery, voglio mettere il valore helloin una variabile:

var type = 

Non sono sicuro se questa domanda debba rimanere taggata come jQuery e chiederla. La maggior parte delle risposte si applica a JS senza jQuery e questo sembra un buon obiettivo dupe.
user4642212

Risposte:


585

Non è necessario per jQuery

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

154
Non abbastanza jQuery! (Sto scherzando: +1.)
nnnnnn,

2
Ho appena appreso che un # può essere usato come 'hash' che funziona come identificatore / parola chiave in JavaScript. Fantastico
Clain Dsilva il

13
Puoi anche usare al .slice(1)posto del .substr(1)quale dovrebbe offrire un modesto aumento delle prestazioni, anche se non fa differenza nella vita reale.
devius,

3
OMG, quante volte dovrai controllare l'hash dell'URL per fare QUALSIASI differenza notevole? Un milione? "Modesto aumento" è un'enorme sopravvalutazione in questo contesto. :-)
konrad

37

Puoi farlo utilizzando il seguente codice:

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

VEDI DEMO


4
Nota: indexOf non è supportato da IE8
Sebastiaan Ordelman il

4
@SchalkKeun per fortuna, ora nel '18 è quasi sparito. Ma per coloro che devono ancora affrontare quella leggenda dovrebbero esserne consapevoli.
Sebastiaan Ordelman,

6
Ad essere onesti, IE8 è così insicuro, praticamente tutti i gateway di pagamento faranno cadere qualsiasi browser che non supporta TLS 1.2 la prossima settimana (30 giugno 2018), non sarai in grado di effettuare pagamenti da loro. In questo modo tutti questi vecchi browser scadenti sono inutili per qualsiasi client di e-commerce.
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);

Demo funzionante su jsfiddle


L' ifistruzione può essere abbreviata in var hash = type[1] || "";.
user4642212


6

Ho avuto l'URL dal runtime, di seguito ha dato la risposta corretta:

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

spero che questo ti aiuti


6

È molto facile. Prova il codice qui sotto

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

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

3

Basato sul codice di AK, ecco una funzione di aiuto. 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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.