Chcę zaimplementować scrollspy jQuery do jednego z projektów, nad którymi pracuję.
Znalazłem to jsfiddle (https://jsfiddle.net/mekwall/up4nu/), które udało mi się zaimplementować w moim projekcie. Chciałbym go zmodyfikować, ale utknąłem w próbie zrozumienia, co oznacza ten fragment kodu.
var topMenu = $("#top-menu"),
menuItems = topMenu.find("a"),
// Anchors corresponding to menu items
scrollItems = menuItems.map(function(){
var item = $($(this).attr("href"));
if (item.length) { return item; }
});
wiem w ogóle, kod wyszuka wszystkie „a” linków, znaleźć href za pomocą funkcji attr(), a jeśli istnieje, dodaj go do mapy. Nie rozumiem tego, co oznacza dodatkowy selektor $()? Rozumiem, że oznacza wybranie/pobranie href dla tego elementu. Co robi funkcja $()? Czy jest to selektor zagnieżdżony? Próbowałem googling, ale nie mogłem znaleźć odpowiedzi na to, lub mój google-fu nie jest do normy.
Również robi
$($(this).attr("href"));
tylko odzyskać łącza w sekcji-on następujący format index.html # sekcja-jednego lub #?
Aktualizacja
także, w jaki sposób '.length' ustalić, czy element istnieje w DOM? Kiedy sprawdzałem logi konsoli, link href z "index.html # section-one" zwróciłby wartość 0, podczas gdy jeden z "# section-one" powróciłby o długości 1. Dlaczego tak się dzieje?
Zawija łańcuch w obiekcie jQuery, w twoim przypadku '# section-one', a następnie można wywoływać metody jQuery. – Tushar
Hej Tushar, dzięki za naprawdę szybką odpowiedź! Jeśli moje zrozumienie jest poprawne, $ ($ this) .attr ("href")); tylko pobiera tekst po znaku #? –
Nie, pobierze pełny tekst 'href' – Tushar