Ottenere la posizione hash dell’URL e utilizzarla in jQuery

Mi piacerebbe ottenere il valore dopo un hash nell’URL della pagina corrente e quindi essere in grado di applicarlo in una nuova funzione … ad es.

L’URL potrebbe essere

www.example.com/index.html#foo 

E vorrei usare questo in congiunzione con il seguente pezzo di codice

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

Sto ipotizzando / sperando che ci sia un modo per afferrarlo e trasformarlo in una variabile che posso quindi usare nel secondo pezzo di codice.

Qualsiasi aiuto sarebbe enormemente apprezzato!

Saluti

Nota del redattore: l’approccio che segue ha serie implicazioni sulla sicurezza e, a seconda della versione di jQuery che stai usando, potrebbe esporre i tuoi utenti agli attacchi XSS. Per ulteriori dettagli, vedere la discussione del ansible attacco nei commenti su questa risposta o questa spiegazione su Security Stack Exchange .

Puoi usare la proprietà location.hash per prendere l’hash della pagina corrente:

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

Nota che questa proprietà contiene già il simbolo # all’inizio.

In realtà non è necessario il :first pseudo-selettore poiché si sta utilizzando il selettore ID , si presume che gli ID siano univoci all’interno del DOM.

Nel caso in cui si desideri ottenere l’hash da una stringa URL, è ansible utilizzare il metodo String.substring :

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

Consiglio: tieni presente che l’utente può modificare l’hash come desidera, iniettando qualcosa per il tuo selettore, dovresti controllare l’hash prima di usarlo.

location.hash non è sicuro per IE , in caso di IE (incluso IE9), se la tua pagina contiene iframe, quindi dopo l’aggiornamento manuale all’interno del contenuto iframe ottieni il valore location.hash è vecchio (valore per il caricamento della prima pagina). mentre il valore recuperato manualmente è diverso da location.hash, quindi recuperalo sempre tramite document.URL

 var hash = document.URL.substr(document.URL.indexOf('#')+1) 

Per coloro che sono alla ricerca di una soluzione javascript pura

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

Spero che questo ti salvi un po ‘di tempo.

Vorrei suggerire meglio cek prima se la pagina corrente ha un hash. Altrimenti sarà undefined .

 $(window).on('load', function(){ if( location.hash && location.hash.length ) { var hash = decodeURIComponent(location.hash.substr(1)); $('ul'+hash+':first').show();; } });