Wie erhalte ich das erste Element, anstatt [0] in jQuery zu verwenden?

91

Ich bin neu bei jQuery und entschuldige mich, wenn dies eine dumme Frage ist.

Wenn ich es benutze, finde ich ein Element mit der ID, ich weiß, dass es immer eine Übereinstimmung gibt, und um darauf zuzugreifen, würde ich den Index [0] verwenden. Gibt es einen besseren Weg, dies zu tun? Zum Beispiel

var gridHeader = $("#grid_GridHeader")[0];
Rubans
quelle

Antworten:

97

Sie können verwenden .get(0) aber ... Sie sollten dies nicht mit einem Element tun müssen, das anhand der ID gefunden wurde. Es sollte immer eindeutig sein. Ich hoffe, dass dies nur ein Versehen im Beispiel ist. Wenn dies auf Ihrer tatsächlichen Seite der Fall ist, müssen Sie es korrigieren, damit Ihre IDs eindeutig sind, und stattdessen eine Klasse (oder ein anderes Attribut) verwenden.

.get()(like [0]) ruft das DOM-Element ab, wenn Sie ein jQuery-Objekt verwenden möchten .eq(0)oder.first() stattdessen :)

Nick Craver
quelle
17
Außer das$("#id") /* jQuery object */ != $("#id").get(0) /* DOM Object */
BrunoLM
9
@BrunoLM - Wenn Sie ein DOM-Element möchten document.getElementById('id'), erstellen Sie kein jQuery-Objekt, nur um es wegzuwerfen ... das ist enorm verschwenderisch, von der Selektor-Engine bis zum Objekt-Wrapper, es ist einfach ohne guten Grund übertrieben :)
Nick Craver
Nick, ich stimme zu, vielleicht war ich ziemlich dumm, nur jquery für alles zu benutzen.
Rubans
2
@ NickCraver - Danke dafür. Ich habe gerade ein paar document.getElementById('id')durch ersetzt, $('#id')[0]aber das hat mir nicht gefallen [0]. Ihr Kommentar zur Verschwendung hat mich zum Nachdenken gebracht $0 = function(id){return document.getElementById(id);}und jetzt gefällt $0('id')es mir besser. Gleiche Anzahl von Zeichen wie $('#id'), ich wünschte nur, es könnte sein$#('id')
Bruno Bronosky
2
Ich wünschte, es gäbe eine Variante dieser Methoden, die einen falschen Wert aus einer leeren Ergebnismenge zurückgibt.
Stephen M. Harris
25

$("#grid_GridHeader:first") funktioniert auch.

Mervyn
quelle
3
Ich denke, dies ist der beste Weg, um Ihr Problem hier zu lösen. Es liest sich gut, im Gegensatz zu .eq (0)
Dave Gregory
18

Sie können die erste Methode verwenden:

$('li').first()

http://api.jquery.com/first/

Übrigens stimme ich Nick Craver zu - benutze document.getElementById () ...

Bennidhamma
quelle
1
Dies gibt ein leeres Array zurück, wenn keine Elemente gefunden werden. Seien Sie vorsichtig mit der Logik Aussagen als []Wille eval true.
Ashley
4

Mit der Annahme, dass es nur ein Element gibt:

 $("#grid_GridHeader")[0]
 $("#grid_GridHeader").get(0)
 $("#grid_GridHeader").get()

... sind alle gleichwertig und geben das einzelne zugrunde liegende Element zurück.

Aus dem jQuery-Quellcode können Sie ersehen, dass get(0)unter dem Deckmantel im Wesentlichen dasselbe getan wird wie beim [0]Ansatz:

 // Return just the object
 ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
Ken Redler
quelle
Vielen Dank für all das, außer get (), das nicht das erste Element zu bekommen scheint.
Rubans
Eigentlich kann ich aus Nick Craves Antwort
ersehen,
3

Sie können den ersten Selektor verwenden.

var header = $('.header:first')
Matt
quelle
Gibt ein Array mit einem einzelnen Element zurück.
Nitin
-3

Sie können Folgendes versuchen:
yourArray.shift()

hjijin
quelle