Chciałbym uzyskać wartość po krzyżyku w adresie URL bieżącej strony, a następnie móc zastosować ją w nowej funkcji ... np.
Może to być adres URL
www.example.com/index.html#foo
Chciałbym tego użyć w połączeniu z następującym fragmentem kodu
$('ul#foo:first').show();
Zakładam / mam nadzieję, że jest jakiś sposób na złapanie tego i przekształcenie w zmienną, której mogę następnie użyć w drugim fragmencie kodu.
jquery
url
hash
fragment-identifier
Robbie White
źródło
źródło
'ul#foo:first'
nie ma sensu, ponieważ identyfikatory muszą być unikalne, dlatego dodawanie:first
do selektora jest zbędne, chyba że powielasz identyfikatory, które są nieprawidłowe. Zwróć uwagę, że nawet dziesięć lat temu powtarzane identyfikatory były nadal nieprawidłowe.Odpowiedzi:
Możesz użyć tej
location.hash
właściwości, aby pobrać hash bieżącej strony:Zauważ, że ta właściwość zawiera już
#
symbol na początku.Właściwie nie potrzebujesz
:first
pseudo-selektora, ponieważ używasz selektora ID , zakłada się, że identyfikatory są unikalne w ramach DOM.W przypadku, gdy chcesz uzyskać hash z ciągu adresu URL, możesz użyć
String.substring
metody:Rada: pamiętaj, że użytkownik może zmienić hash, jak chce, wstrzykując cokolwiek do twojego selektora, powinieneś sprawdzić hash przed jego użyciem.
źródło
var hash = location.hash.slice(1); $('ul.item'+hash).show().append($('#content'));
spowoduje to wykonanie tagu skryptu umieszczonego w hashu. Lepiej jest używać$('body').find('ul'+hash+':first')
zamiast$('ul'+hash+':first')
.var hash = location.hash.replace('#', '');
$(userInput)
jest ogólnie niebezpieczny, ponieważ$
jest przeciążony i może albo wyszukiwać istniejące węzły, albo tworzyć nowe w zależności od tego, czy ciąg zawiera<>
znaki.$(document).find(userInput)
będzie zawsze szukać istniejących węzłów, więc jest to mniej niebezpieczne. Mimo to najlepszą praktyką jest zawsze oczyszczanie danych wejściowych użytkownika, np. Jeśli używasz identyfikatorów alfanumerycznych, upewnij się, że są one alfanumeryczne.location.hash nie jest bezpieczny dla IE , w przypadku IE (w tym IE9), jeśli Twoja strona zawiera iframe, to po ręcznym odświeżeniu wewnątrz treści iframe uzyskaj wartość location.hash jest stara (wartość dla pierwszej strony załadowanej). podczas gdy ręcznie pobierana wartość różni się od location.hash, więc zawsze pobieraj ją za pośrednictwem document.URL
źródło
Dla tych, którzy szukają czystego rozwiązania javascript
Mam nadzieję, że zaoszczędzi ci to trochę czasu.
źródło
Od wersji jQuery 1.9
:target
selektor będzie pasował do skrótu adresu URL. Więc możesz zrobić:Który wybrałby element z identyfikatorem pasującym do skrótu i pokazałby go.
źródło
:target
jako ciąg? Jeśli tak, to nie sądzę.Sugerowałbym najpierw lepiej cek, jeśli bieżąca strona ma hash. W przeciwnym razie tak będzie
undefined
.źródło
Używam tego, aby rozwiązać wpływ na bezpieczeństwo odnotowany w odpowiedzi @ CMS.
źródło