Obteniendo la ubicación hash URL y usándola en jQuery

Me gustaría obtener el valor después de un hash en la URL de la página actual y luego poder aplicar esto en una nueva función … ej.

La URL podría ser

www.example.com/index.html#foo 

Y me gustaría usar esto junto con el siguiente fragmento de código

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

Estoy asumiendo / esperando que haya alguna forma de agarrar esto, y convertirlo en una variable que pueda usar en el segundo fragmento de código.

¡Cualquier ayuda sería apreciada masivamente!

Aclamaciones

Nota del editor: el siguiente enfoque tiene serias implicaciones de seguridad y, dependiendo de la versión de jQuery que esté utilizando, puede exponer a los usuarios a ataques XSS. Para obtener más detalles, consulte la discusión sobre el posible ataque en los comentarios sobre esta respuesta o sobre esta explicación en Security Stack Exchange .

Puede usar la propiedad location.hash para tomar el hash de la página actual:

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

Tenga en cuenta que esta propiedad ya contiene el símbolo # al principio.

En realidad, no necesita el :first selector: ya que está utilizando el selector de ID , se supone que los ID son únicos dentro del DOM.

En caso de que desee obtener el hash de una cadena de URL, puede usar el método String.substring :

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

Consejo: tenga en cuenta que el usuario puede cambiar el hash como lo desee, inyectando cualquier cosa a su selector, debe verificar el hash antes de usarlo.

location.hash no es seguro para IE , en el caso de IE (incluido IE9), si su página contiene iframe, luego de la actualización manual dentro del contenido del iframe obtiene el valor de location.hash es viejo (valor para la carga de la primera página). mientras que el valor recuperado manualmente es diferente de location.hash, por lo que siempre debe recuperarlo a través de document.URL

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

Para aquellos que buscan una solución javascript pura

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

Espero que esto te ahorre algo de tiempo.

Sugeriría mejor cek primero si la página actual tiene un hash. De lo contrario, será undefined .

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