2015-08-18 3 views
5

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?

+4

Es wickelt die Zeichenfolge in jQuery-Objekt, in Ihrem Fall '# section-one' und dann jQuery Methoden können darauf – Tushar

+0

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? –

+0

Nein, es wird den vollständigen Text von 'href' abgerufen. – Tushar

Antwort

2

In Ihrem Fall sind die href Anker-Namen (oder Fragment-IDs), die bequem als id Selektoren. Indem Sie auf das href-Attribut verweisen und dieses dann mit $() umbrechen, wählen Sie effektiv ein Element mit diesem id aus.

So würde normalerweise zu einem benannten Anker "faq" springen, aber indem Sie den Attr-Wert von href einschließen, wählen Sie $('#faq').

1
$($(this).attr("href")); 

Im obigen Ausdruck wird $(this).attr("href")href Attribut des angegebenen HTML-Element geben, die Zeichenfolge ist. Wenn Sie diese Zeichenfolge jQuery-Objekt konvertiert werden sollen und weitere Manipulation zu tun, können Sie es mit zusätzlichen $() wie

$($(this).attr("href")) 
3

erreichen Dieser Code geht davon aus, dass das href Attribut wird eine id Referenz, wie #about. Die äußere $() geht voran und ergreift das #about Element für Sie.

+2

Nicht nur 'id', ** irgendein Selektor ** – Tushar

+2

Sie haben Recht, aber nur eine 'id' wäre eine gültige' href'. –