Note de l'éditeur: l'approche ci-dessous a de sérieuses implications en matière de sécurité et, en fonction de la version de jQuery que vous utilisez, peut exposer vos utilisateurs à des attaques XSS. Pour plus de détails, voir la discussion de l'attaque possible dans les commentaires de cette réponse ou cette explication sur Security Stack Exchange.
Vous pouvez utiliser la propriété location.hash
pour récupérer le hash de la page actuelle :
var hash = window.location.hash;
$('ul'+hash+':first').show();
Remarquez que cette propriété contient déjà le symbole #
au début.
En fait, vous n'avez pas besoin du pseudo-sélecteur :first
puisque vous utilisez le sélecteur ID, il est supposé que les IDs sont uniques dans le DOM.
Dans le cas où vous souhaitez obtenir le hash à partir d'une chaîne d'URL, vous pouvez utiliser la méthode String.substring
:
var url = "http://example.com/file.htm#foo";
var hash = url.substring(url.indexOf('#')); // '#foo'
Conseil: Sachez que l'utilisateur peut changer le hash comme il le souhaite, injectant n'importe quoi dans votre sélecteur, vous devriez vérifier le hash avant de l'utiliser.
10 votes
Je n'ai pas de code pour vous, mais vous devriez vous assurer de nettoyer l'entrée, car cela semble être propice à l'injection de code.
0 votes
En comprenant que cette question remonte de près d'une décennie,
'ul#foo:first'
ne semble pas logique puisque les IDs doivent être uniques, donc ajouter:first
au sélecteur est redondant, à moins que vous ne dupliquiez des IDs ce qui est invalide. Notez que même il y a une décennie, les IDs répétés étaient toujours invalides.0 votes
Encore avait tort il y a une décennie