J'ai du code jQuery / JavaScript que je veux exécuter uniquement lorsqu'il y a un #
lien d'ancrage hash ( ) dans une URL. Comment pouvez-vous vérifier ce personnage en utilisant JavaScript? J'ai besoin d'un simple test fourre-tout qui détecterait des URL comme celles-ci:
example.com/page.html#anchor
example.com/page.html#anotheranchor
Fondamentalement, quelque chose comme:
if (thereIsAHashInTheUrl) {
do this;
} else {
do this;
}
Si quelqu'un pouvait m'orienter dans la bonne direction, ce serait très apprécié.
javascript
jquery
anchor
fragment-identifier
Philip Morton
la source
la source
.search
est disponible sur un<a>
, non.query
. JQuery Exemple:$("<a/>").attr({ "href": "http://www.somewhere.com/a/b/c.html?qs=1#fragmenttest" })[0]
..hash => "#fragmenttest"
et.search
=?qs=1
. À partir de là, appuyez sur la question d'extraction de la chaîne de requête pour obtenir autre chose qu'une chaîne.hashchange
événement et nonwindow.location.hash
. Bien que ce dernier ne soit pas supporté par IE <8.la source
Mettez ce qui suit:
la source
Si l'URI n'est pas l'emplacement du document, cet extrait fera ce que vous voulez.
la source
obj['0']
. Dans JS, cela est vrai: pararr[0] === arr['0']
conséquent, si l'index / la clé n'existe pas, la valeur renvoyée n'est pas définie au lieu d'être hors limites. jsfiddle.net/web5me/Mw376Avez-vous essayé cela?
(Où
url
est l'URL que vous souhaitez vérifier, évidemment.)la source
Cela résoudra le problème;)
la source
renverra l'identifiant de hachage
la source
... ou il y a un sélecteur jquery:
la source
Voici ce que vous pouvez faire pour vérifier périodiquement un changement de hachage, puis appeler une fonction pour traiter la valeur de hachage.
la source
setTimeout(checkHash, 400)
. De plus, les navigateurs modernes ont l'hashchange
événement afin que vous puissiez faire unwindow.addEventListener('hashchange', function(){ … })
. Enfin, la fuite de lahash
variable globale est une autre pratique non recommandée, même pour un exemple.La plupart des gens connaissent les propriétés de l'URL dans document.location. C'est génial si vous êtes uniquement intéressé par la page actuelle. Mais la question était de pouvoir analyser les ancres sur une page et non la page elle-même.
Ce que la plupart des gens semblent manquer, c'est que ces mêmes propriétés d'URL sont également disponibles pour ancrer les éléments:
la source
la source
la source
Les commentaires de Partridge et Gareths ci-dessus sont excellents. Ils méritent une réponse distincte. Apparemment, les propriétés de hachage et de recherche sont disponibles sur n'importe quel objet Link html:
Ou
Si vous en avez besoin sur une variable de chaîne régulière et que jQuery est présent, cela devrait fonctionner:
(mais c'est peut-être un peu exagéré ..)
la source
Lancer ceci ici comme méthode pour extraire les propriétés d'emplacement à partir de chaînes arbitraires de type URI. Bien que cela
window.location instanceof Location
soit vrai, toute tentative d'invocationLocation
vous dira que c'est un constructeur illégal. Vous pouvez toujours obtenir à des choses commehash
,query
,protocol
etc en réglant votre chaîne comme lahref
propriété d'un élément d'ancrage DOM, qui partagera ensuite toutes les propriétés d'adresse avecwindow.location
.La façon la plus simple de procéder est:
Pour plus de commodité, j'ai écrit une petite bibliothèque qui l'utilise pour remplacer le
Location
constructeur natif par un autre qui prendra des chaînes et produira deswindow.location
objets similaires: Location.jsla source
Habituellement, les clics passent d'abord aux changements d'emplacement, donc après un clic est une bonne idée de définir TimeOut pour obtenir la mise à jour de window.location.hash
ou vous pouvez écouter l'emplacement avec:
J'ai écrit un plugin jQuery qui fait quelque chose comme ce que vous voulez faire.
C'est un simple routeur d'ancrage.
la source
Voici une fonction simple qui retourne
true
oufalse
(a / n'a pas de hashtag):Renvoie
true
dans ce cas.Basé sur le commentaire de @ jon-skeet.
la source
Voici un moyen simple de tester cela pour l'URL de la page actuelle:
la source
parfois, vous obtenez la chaîne de requête complète telle que "#anchorlink? firstname = mark"
voici mon script pour obtenir la valeur de hachage:
la source