2010-08-27 18 views
14
var username = $("#username"), 
       password = $("#password"), 
       allFields = $([]).add(username).add(password); 

Was ist allFields? Was ist $ ([])?

Da ich ein Neuling zu Javascript/jQuery bin, habe ich diese $ ([]) -Notation noch nie gesehen und bin an den zugehörigen Methoden interessiert.

Angesichts seiner "$ ([])", es ist schwierig zu suchen. Und eine Google-Suche nach Arrays in Javascript (die Vermutung, dass es sich um ein Array irgendeiner Art handelt) ergibt die typischen Arrays, die mir vertraut sind.

Also was ist $ ([])? Kann mir jemand auf eine Dokumentation hinweisen? Ich bin daran interessiert zu lernen, wie man dieses seltsame Ding benutzt.

+0

Ich glaube, 'allFields = $ ([Benutzername, Passwort])' wäre ein eqiuvalent Statment.Wenn Sie kein mit jQuery erweitertes Array benötigen, dann genügt 'allFields = [Benutzername, Passwort]'. –

+0

@Chris Shouts: Schließen, aber es müsste '$ ([Benutzername [0], Passwort [0]])' leider sein. –

Antwort

12

Die jQuery-Funktion akzeptiert ein Array von DOM-Knoten.

$([document.body]) zum Beispiel, das ein jQuery-Objekt zurückgibt, indem es alle DOM-Elemente umhüllt, die in diesem Array übergeben werden. Da in Ihrem Beispiel jedoch kein DOM-Objekt vorhanden ist und es sich lediglich um ein leeres Array handelt, muss kein leeres Array übergeben werden.

Der Aufruf der jQuery-Funktion ohne Argumente gibt eine leere Menge zurück. Genommen von jQuery docs,

Rückgabe eines leeren Set

Ab jQuery 1.4, die jQuery() -Methode aufrufen ohne Argumente ein leeres jQuery zurückgibt. In früheren Versionen von jQuery würde dies eine Menge zurückgeben, die den Dokumentknoten enthält.

So würde Ihr Beispiel die gleiche Arbeit, wenn Sie stattdessen

$().add(username).add(password); 

Wie andere Antworten erwähnt genannt hatte und die docs sagen, wird ein leeres Array übergeben, bevor 1,4 v erforderlich war.

+0

+1 Gute Antwort. Ich habe vergessen, dass es ein neues Verhalten ist, dass '$()' ein leeres Objekt zurückgibt. – user113716

+0

Danke, das ist, was ich gesucht habe. Ausgezeichnete Antwort. –

+1

@Tina - Denken Sie daran, diese Antwort zu akzeptieren, wenn Sie das Gefühl haben, dass Anurag die klarste Erklärung gegeben hat. Sie akzeptieren, indem Sie auf das große Häkchen links daneben klicken. : o) – user113716

6

[] es ist ein leeres Array. Wrapping es mit $() überlädt es mit jQuery-Funktionen.

In Javascript Sie ein Array auf diese Weise erstellen:

var foo = []; 
+0

Überlädt es mit jQuery-Funktionen? Wenn Sie beispielsweise '$ (foo)' 'verwenden, bezieht sich Ihr Verweis auf' foo' immer noch auf ein normales Array. – user113716

+0

ist streng, das Ergebnis von $ (foo) ist überladen, foo bleibt "normal". – fcingolani

+1

"Überladung" ist eine unglückliche Beschreibung für eine Dollarzeichenfunktion. –

5

Es ist ein leeres Array wird in der Schaffung eines jQuery-Objekt übergeben. Vermutlich etwas zu initialisieren.

Sollte nicht notwendig sein, zumindest nicht in den neuesten Versionen von jQuery.

Hier ist ein Beispiel ohne das Array: http://jsfiddle.net/MAzLN/

funktionieren gut, wie die alert() ein Element in dem Objekt zeigt.

jQuery initialisiert die length -Eigenschaft zu 0, wenn das Objekt erstellt wird, so bin ich mir nicht sicher, was der Zweck ist, es sei denn, es war in der Vergangenheit erforderlich.

+0

Whoa, sehr cooler Link! Vielen Dank! –

3

Ich glaube, es erstellt ein leeres jQuery-Sammlungsobjekt.

+0

Um Daniels Antwort hinzuzufügen, konnten Sie mit älteren Versionen von jQuery kein leeres jQuery-Objekt mit nur $() erstellen, daher war es notwendig, ein leeres Array zu übergeben. – CalebD