Mam trochę kodu jQuery / JavaScript, który chcę uruchomić tylko wtedy, gdy #
w adresie URL znajduje się link kotwiczący hash ( ). Jak sprawdzić tę postać za pomocą JavaScript? Potrzebuję prostego testu typu catch-all, który wykryłby takie adresy URL:
example.com/page.html#anchor
example.com/page.html#anotheranchor
Zasadniczo coś w stylu:
if (thereIsAHashInTheUrl) {
do this;
} else {
do this;
}
Byłbym bardzo wdzięczny, gdyby ktokolwiek mógł skierować mnie w dobrym kierunku.
javascript
jquery
anchor
fragment-identifier
Philip Morton
źródło
źródło
.search
jest dostępny na<a>
, nie.query
. JQuery próbki:$("<a/>").attr({ "href": "http://www.somewhere.com/a/b/c.html?qs=1#fragmenttest" })[0]
..hash => "#fragmenttest"
i.search
=?qs=1
. Stamtąd kliknij pytanie ekstrakcyjne, aby uzyskać coś innego niż ciąg.hashchange
wydarzenia, a niewindow.location.hash
. Chociaż ten ostatni nie jest obsługiwany przez IE <8.źródło
Umieść następujące informacje:
źródło
Jeśli identyfikator URI nie jest lokalizacją dokumentu, ten fragment kodu zrobi to, co chcesz.
źródło
obj['0']
. W JS jest to prawdą:arr[0] === arr['0']
dlatego jeśli indeks / klucz nie istnieje, zwrócona wartość jest niezdefiniowana zamiast poza granicami. jsfiddle.net/web5me/Mw376Próbowałeś tego?
(
url
Oczywiście gdzie jest adres URL, który chcesz sprawdzić).źródło
To rozwiąże problem;)
źródło
zwróci identyfikator skrótu
źródło
... lub istnieje selektor jquery:
źródło
Oto, co możesz zrobić, aby okresowo sprawdzać zmianę wartości skrótu, a następnie wywołać funkcję w celu przetworzenia wartości skrótu.
źródło
setTimeout(checkHash, 400)
. Ponadto nowoczesne przeglądarki mająhashchange
wydarzenie, dzięki czemu możesz to zrobićwindow.addEventListener('hashchange', function(){ … })
. Wreszcie, wyciekaniehash
zmiennej globalnej jest kolejną niezalecaną praktyką, nawet dla przykładu.Większość osób zna właściwości adresu URL w document.location. To świetnie, jeśli interesuje Cię tylko bieżąca strona. Pytanie dotyczyło jednak możliwości analizowania kotwic na stronie, a nie samej strony.
Większość osób zdaje się tęsknić za tym, że te same właściwości adresów URL są również dostępne dla elementów zakotwiczenia:
źródło
źródło
źródło
Komentarze kuropatwy i Garetha powyżej są świetne. Zasługują na osobną odpowiedź. Najwyraźniej właściwości mieszania i wyszukiwania są dostępne w każdym obiekcie linku HTML:
Lub
Jeśli potrzebujesz tego na zwykłej zmiennej łańcuchowej i akurat masz jQuery, powinno to działać:
(ale to może trochę przesadzone ..)
źródło
Rzucając to tutaj jako metodę wyodrębnienia właściwości lokalizacji z dowolnych ciągów podobnych do URI. Chociaż
window.location instanceof Location
jest to prawdą, każda próba wywołaniaLocation
powie ci, że jest to nielegalny konstruktor. Nadal można dostać się do takich rzeczy jakhash
,query
,protocol
itp ustawiając swój ciąg jakohref
własność elementu DOM kotwica, która będzie następnie udostępnić wszystkie właściwości z adresuwindow.location
.Najprostszym sposobem na to jest:
Dla wygody napisałem małą bibliotekę, która wykorzystuje to do zamiany natywnego
Location
konstruktora na taki, który pobiera ciągi znaków i tworzywindow.location
obiekty podobne do: Location.jsźródło
Zwykle kliknięcia zaczynają się od zmian lokalizacji, więc po kliknięciu dobrym pomysłem jest ustawienieTimeOut, aby zaktualizować window.location.hash
lub możesz słuchać lokalizacji za pomocą:
Napisałem wtyczkę jQuery, która robi coś takiego, jak chcesz.
To prosty router z kotwicą.
źródło
Oto prosta funkcja, która zwraca
true
lubfalse
(ma / nie ma hashtaga):Zwraca
true
w tym przypadku.Na podstawie komentarza @ jon-skeet.
źródło
Jest to prosty sposób przetestowania tego dla bieżącego adresu URL strony:
źródło
czasami pojawia się pełny ciąg zapytania, taki jak „#anchorlink? firstname = mark”
to jest mój skrypt, aby uzyskać wartość skrótu:
źródło