Ich möchte eine jQuery scrollspy zu einem der Projekte, an denen ich arbeite, implementieren.
Ich fand diese jsfiddle (https://jsfiddle.net/mekwall/up4nu/), die ich in meinem Projekt implementiert habe. Ich möchte es modifizieren, aber ich versuche nicht zu verstehen, was dieses Stück Code bedeutet.
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; }
});
Ich weiß im allgemeinen, der Code für alle „a“ Links suchen, die href über die attr() Funktion finden, und wenn es vorhanden ist, fügen Sie ihn in die Karte. Was ich nicht verstehe, ist
$($(this).attr("href"));
Was bedeutet der extra $() Selektor? Ich verstehe, dass
$(this).attr("href");
bedeutet Auswählen/Abrufen der href für dieses Element. Was macht das $()? Ist es ein geschachtelter Selektor? Ich habe versucht zu googeln, aber ich konnte keine Antworten finden, oder mein Google-Fu ist nicht auf Augenhöhe. Auch
, tut
$($(this).attr("href"));
nur abrufen Links im folgenden Format index.html # schnitts ein oder # Abschnitt-on?
aktualisieren
Auch, wie würde '.length' bestimmen, ob das Element im DOM existiert? Wenn ich die Konsolenprotokolle überprüfte, würde ein href-Link mit 'index.html # section-one' die Länge 0 zurückgeben, während einer mit nur '# section-one' die Länge 1 zurückgeben würde. Warum passiert das?
Es wickelt die Zeichenfolge in jQuery-Objekt, in Ihrem Fall '# section-one' und dann jQuery Methoden können darauf – Tushar
Hey Tushar, danke für die wirklich schnelle Antwort! Wenn mein Verständnis korrekt ist, $ ($ this) .attr ("href")); Ruft nur den Text nach dem Symbol # ab? –
Nein, es wird den vollständigen Text von 'href' abgerufen. – Tushar