Was ist der Unterschied zwischen $ .each (Selektor) und $ (Selektor) .each ()


81

Was ist der Unterschied zwischen diesen:

$.each($('#myTable input[name="deleteItem[]"]:checked').do_something());

und das:

$('#myTable input[name="deleteItem[]"]:checked').each(function() { do_something });

Das HTML für die Tabellenzelle, die ausgewählt und bearbeitet wird, sieht folgendermaßen aus:

<td width="20px"><input type="checkbox" class="chkDeleteItem" name="deleteItem[]" value="' . $rowItem['itemID'] . '" /></td>

Ich habe die jQuery-Dokumentation durchgesehen, aber ich verstehe den Unterschied immer noch nicht. (Bin ich es oder ist diese Dokumentation manchmal etwas "nebulös" in der Klarheit des Inhalts?)

Info hinzugefügt:

Anscheinend verwirrt mein Versuch, ein generisches Beispiel zu geben, die Leute! Zusammen mit der (zuvor) fehlenden Klammer im ersten Beispiel. :(

Das erste Beispiel stammt aus einer Zeile in meinem Code, in der der <tbody> für alle Zeilen mit einem aktivierten Kontrollkästchen entfernt wird:

$.each($('#classesTable input[name="deleteClasses[]"]:checked').parent().parent().parent().remove());

Das zweite Beispiel stammt aus einer Situation, in der ich in der #classesTable nach aktivierten Kontrollkästchen suche und das entsprechende Element in einer Dropdown-Liste entferne.

$('#classesTable input[name="deleteClasses[]"]:checked').each(function(){
    $('#classesList option[value="' + $(this).attr('value') + '"]').remove();
});

Ich verstehe, dass sie zwei verschiedene Dinge tun, aber nicht bis zu dem Punkt, an dem ich sagen könnte: "Ich muss in diesem Fall $ .each () und in einem anderen Fall .each (function () {}) verwenden.

Sind sie überhaupt austauschbar? Nur in einigen Fällen? Noch nie?


In Ihrem ersten Codebeispiel fehlt eine schließende Klammer.
Tjollans

Ein Kommentar und ein Komma, siehe meine Antwort für ein Beispiel.
StuperUser

Die Absicht des ersten Beispiels könnte auf verschiedene Arten interpretiert werden. Bitte korrigieren Sie es, um zu reflektieren, was Sie tatsächlich tun.
user113716

Ich habe den fehlenden rechten Paren am Ende der Zeile kurz vor dem Semikolon hinzugefügt.
Marky

Beziehen Sie sich auf 5 Verwendungsmöglichkeiten von jQuery $ .each () codepedia.info/use-jquery-each-method-loop
Satinder singh

Antworten:


102

Beschreibung:

.eachist ein Iterator, der verwendet wird, um nur die Sammlung von jQuery-Objekten zu durchlaufen, während jQuery.each( $.each) eine allgemeine Funktion zum Durchlaufen von JavaScript-Objekten und -Arrays ist.


Beispiele

1) $.each() Funktion verwenden

var myArray = [10,20,30];

$.each( myArray, function(index, value) {
   console.log('element at index ' + index + ' is ' + value);
});

//Output
element at index 0 is 10
element at index 1 is 20
element at index 2 is 30

2) Mit .each() Methode

$('#dv').children().each(function(index, element) {
    console.log('element at index ' + index + 'is ' + (this.tagName));
    console.log('current element as dom object:' + element);
    console.log('current element as jQuery object:' + $(this));
});

//Output
element at index 0 is input
element at index 1 is p
element at index 2 is span

Ressourcen


5

von http://api.jquery.com/jQuery.each :

Die Funktion $ .each () ist nicht mit .each () identisch, mit der ausschließlich ein jQuery-Objekt durchlaufen wird. Mit der Funktion $ .each () können Sie jede Sammlung durchlaufen, unabhängig davon, ob es sich um eine Karte (JavaScript-Objekt) oder ein Array handelt.


3

Sie möchten wirklich $.eachmit einem Array verwenden, das keine Elemente oder ähnliches ist. dh:

var x = ["test", "test2"];

Sie würden verwenden $.each(x..., um das zu durchlaufen, anstatt x.each:)

.each ist nur für Elemente :)


1

Es gibt keinen funktionalen Unterschied. Jedes jQuery-Objekt besitzt eine .each()Methode, von der geerbt wurde jQuery.fn. Durch das Aufrufen object methodweiß jQuery bereits, über was Array (-like object)iteriert werden soll. Mit anderen Worten, es wird eine Schleife über indexed propertysdas aktuelle jQuery-Objekt ausgeführt.

$.each()Auf der anderen Seite ist es nur ein "Hilfswerkzeug", das jede Art von Arrayoder Objectdurchläuft, aber natürlich müssen Sie dieser Methode mitteilen, welches Ziel Sie iterieren möchten.
Es kümmert sich auch um Sie, ob Sie ein Array oder ein Objekt übergeben, es macht das Richtige mit einem for-inoder for loopunter der Haube.


1

Der erste führt die Rückruffunktion für die Elemente in der Sammlung aus, die Sie übergeben haben, aber Ihr Code ist derzeit syntaktisch nicht korrekt.

Es sollte sein:

$.each($('#myTable input[name="deleteItem[]"]:checked'), do_something);

Siehe: http://api.jquery.com/jQuery.each/

Im zweiten Schritt wird die Funktion für jedes Element der Sammlung ausgeführt, für die Sie sie ausführen.

Siehe: http://api.jquery.com/each/


Sie rufen an, do_somethinganstatt es weiterzugeben. Dies ist falsch, es sei denn do_something, es wird eine Funktion zurückgegeben.
user113716

0

Im ersten Fall können Sie über jQuery-Objekte und auch andere Array-Elemente iterieren, wie hier angegeben:

jQuery.each ()

Im zweiten Fall können Sie nur über jQuery-Objekte iterieren, wie hier angegeben:

.jeder()


0

Soweit ich $.each();weiß, durchläuft es ein Objekt oder Array und gibt Ihnen den Iterator und den Wert jedes Elements an.

$().each(); Durchläuft eine Liste von jQuery-Objekten und gibt Ihnen den Iterator und das jQuery-Objekt.


0

Entnommen aus http://api.jquery.com/jQuery.each/

Die $.each()Funktion ist nicht dieselbe wie die .each(), mit der ausschließlich ein jQuery-Objekt durchlaufen wird. Die $.each()Funktion kann verwendet werden, um über jede Sammlung zu iterieren, unabhängig davon, ob es sich um eine Karte (JavaScript-Objekt) oder ein Array handelt. Im Fall eines Arrays wird dem Rückruf jedes Mal ein Array-Index und ein entsprechender Array-Wert übergeben. (Auf den Wert kann auch über das Schlüsselwort this zugegriffen werden. Javascript umschließt diesen Wert jedoch immer als Objekt, auch wenn es sich um einen einfachen Zeichenfolgen- oder Zahlenwert handelt.) Die Methode gibt ihr erstes Argument zurück, das Objekt, das iteriert wurde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.