J'aimerais obtenir la valeur après un hachage dans l'URL de la page actuelle et ensuite pouvoir l'appliquer dans une nouvelle fonction ... par exemple.
L'URL peut être
www.example.com/index.html#foo
Et je voudrais utiliser ceci en conjonction avec le morceau de code suivant
$('ul#foo:first').show();
Je suppose / j'espère qu'il existe un moyen de saisir cela et de le transformer en une variable que je peux ensuite utiliser dans le deuxième morceau de code.
jquery
url
hash
fragment-identifier
Robbie White
la source
la source
'ul#foo:first'
n'a pas de sens puisque les identifiants doivent être uniques, donc l'ajout:first
au sélecteur est redondant, à moins que vous ne dupliquiez des identifiants invalides. Notez qu'il y a même une décennie, les ID répétés n'étaient toujours pas valides.Réponses:
Vous pouvez utiliser la
location.hash
propriété pour récupérer le hachage de la page actuelle:Notez que cette propriété contient déjà le
#
symbole au début.En fait, vous n'avez pas besoin du
:first
pseudo-sélecteur puisque vous utilisez le sélecteur d'ID , on suppose que les ID sont uniques dans le DOM.Si vous souhaitez obtenir le hachage à partir d'une chaîne d'URL, vous pouvez utiliser la
String.substring
méthode:Conseil: sachez que l'utilisateur peut modifier le hachage comme il le souhaite, en injectant n'importe quoi dans votre sélecteur, vous devez vérifier le hachage avant de l'utiliser.
la source
var hash = location.hash.slice(1); $('ul.item'+hash).show().append($('#content'));
cela exécutera une balise de script placée dans le hachage. C'est une bonne habitude à utiliser à la$('body').find('ul'+hash+':first')
place$('ul'+hash+':first')
.var hash = location.hash.replace('#', '');
$(userInput)
est généralement dangereux car il$
est surchargé et peut rechercher des nœuds existants ou en créer de nouveaux selon que la chaîne contient des<>
caractères.$(document).find(userInput)
recherchera toujours les nœuds existants afin qu'il soit moins dangereux. Cela dit, la meilleure pratique consiste à toujours nettoyer les entrées de l'utilisateur, par exemple, si vous utilisez des identifiants alphanumériques, assurez-vous qu'ils sont alphanumériques.location.hash n'est pas sûr pour IE , dans le cas d'IE (y compris IE9), si votre page contient iframe, puis après une actualisation manuelle à l'intérieur du contenu iframe, la valeur location.hash est ancienne (valeur pour le chargement de la première page). alors que la valeur récupérée manuellement est différente de location.hash, récupérez-la toujours via document.URL
la source
Pour ceux qui recherchent une solution javascript pure
J'espère que cela vous fera gagner du temps.
la source
Depuis jQuery 1.9, le
:target
sélecteur correspondra au hachage de l'URL. Vous pouvez donc faire:Ce qui sélectionnerait l'élément avec l'ID correspondant au hachage et l'afficherait.
la source
:target
sous forme de chaîne? Si c'est le cas, je ne le crois pas.Je suggérerais mieux cek d'abord si la page actuelle a un hachage. Sinon, ce sera le cas
undefined
.la source
J'utilise ceci pour aborder les implications de sécurité notées dans la réponse de @ CMS.
la source