Me gustaría obtener el valor después de un hash en la URL de la página actual y luego poder aplicarlo en una nueva función ... por ejemplo.
La URL podría ser
www.example.com/index.html#foo
Y me gustaría usar esto junto con el siguiente código
$('ul#foo:first').show();
Estoy asumiendo / esperando que haya alguna forma de agarrar esto, y convertirlo en una variable que luego pueda usar en el segundo fragmento de código.
jquery
url
hash
fragment-identifier
Robbie White
fuente
fuente
'ul#foo:first'
no tiene sentido ya que las ID deben ser únicas, por lo tanto, agregar:first
al selector es redundante, a menos que esté duplicando ID que no es válido. Tenga en cuenta que incluso hace una década, las identificaciones repetidas aún no eran válidas.Respuestas:
Puede usar la
location.hash
propiedad para obtener el hash de la página actual:Tenga en cuenta que esta propiedad ya contiene el
#
símbolo al principio.En realidad no necesita el
:first
pseudo-selector ya que está utilizando el selector de ID , se supone que las ID son únicas dentro del DOM.En caso de que desee obtener el hash de una cadena URL, puede usar el
String.substring
método:Consejo: Tenga en cuenta que el usuario puede cambiar el hash como quiera, inyectando cualquier cosa en su selector, debe verificar el hash antes de usarlo.
fuente
var hash = location.hash.slice(1); $('ul.item'+hash).show().append($('#content'));
esto ejecutará una etiqueta de script colocada en el hash. Es un buen hábito usar en$('body').find('ul'+hash+':first')
lugar de$('ul'+hash+':first')
.var hash = location.hash.replace('#', '');
$(userInput)
generalmente no es seguro porque$
está sobrecargado y puede buscar nodos existentes o crear nuevos dependiendo de si la cadena contiene<>
caracteres.$(document).find(userInput)
siempre buscará nodos existentes para que sea menos inseguro. Dicho esto, la mejor práctica es desinfectar siempre la entrada del usuario, por ejemplo, si usa identificadores alfanuméricos, asegúrese de que sea alfanumérico.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, obtenga el valor location.hash es antiguo (valor para la primera carga de la página). mientras que el valor recuperado manualmente es diferente de location.hash, recuérdelo siempre a través de document.URL
fuente
Para aquellos que buscan una solución javascript pura
Espero que esto te ahorre algo de tiempo.
fuente
Desde jQuery 1.9, el
:target
selector coincidirá con el hash de URL. Entonces podrías hacer:Que seleccionaría el elemento con la ID que coincida con el hash y lo mostraría.
fuente
:target
como una cadena? Si es así, no lo creo.Sugeriría mejor cek primero si la página actual tiene un hash. De lo contrario lo será
undefined
.fuente
Estoy usando esto para abordar las implicaciones de seguridad señaladas en la respuesta de @ CMS.
fuente