jQuery zum Durchlaufen von Elementen mit derselben Klasse

582

Ich habe eine testimonialMenge Divs mit der Klasse und möchte sie mit jquery durchlaufen, um für jedes Div zu überprüfen, ob eine bestimmte Bedingung erfüllt ist. Wenn es wahr ist, sollte es eine Aktion ausführen.

Weiß jemand, wie ich das machen würde?

geoffs3310
quelle

Antworten:

1052

Verwenden Sie jeweils: ' i' ist die Position im Array, objist das DOM-Objekt, das Sie iterieren (kann auch über den jQuery-Wrapper aufgerufen werden $(this)).

$('.testimonial').each(function(i, obj) {
    //test
});

Überprüfen Sie die API-Referenz für weitere Informationen.

Kees C. Bakker
quelle
2
Die Funktion mit den Parametern i, obj hilft sehr. Wenn nur jeder verwendet wurde, wurde nicht iteriert.
Darwindeeds
2
@Darwindeeds richtig! Die Funktion wird vom eigentlichen Iterator verwendet, um jedes Element zu verarbeiten. Durch die Rückkehr falsewird die Iteration gestoppt.
Kees C. Bakker
138
Es sei darauf hingewiesen, dass "obj" das dom-Objekt sein wird, während $ (this) das jQuery-Objekt ist.
AndreasT
Können wir nicht jQuery (dieses 'ul li') machen. Länge, um die Länge dieser Elemente ul li zu erhalten?
Techie_28
16
+1 für den Vorschlag $(this), auf das Objekt zuzugreifen ... Als objDOM-Objekt können beispielsweise keine Funktionen direkt obj.empty()
angehängt werden
127

Versuche dies...

$('.testimonial').each(function(){
    //if statement here 
    // use $(this) to reference the current div in the loop
    //you can try something like...


    if(condition){

    }


 });
stephen776
quelle
4
Zu Ihrer Information: break;wird nicht brechen. Sie müssen verwendenreturn false;
Kolob Canyon
53

Es ist heutzutage ziemlich einfach, dies ohne jQuery zu tun.

Ohne jQuery:

Wählen Sie einfach die Elemente aus und iterieren Sie mit der .forEach()Methode darüber:

const elements = document.querySelectorAll('.testimonial');
Array.from(elements).forEach((element, index) => {
  // conditional logic here.. access element
});

In älteren Browsern:

var testimonials = document.querySelectorAll('.testimonial');
Array.prototype.forEach.call(testimonials, function(element, index) {
  // conditional logic here.. access element
});
Josh Crozier
quelle
42

Versuchen Sie dieses Beispiel

Html

<div class="testimonial" data-index="1">
    Testimonial 1
</div>
<div class="testimonial" data-index="2">
    Testimonial 2
</div>
<div class="testimonial" data-index="3">
    Testimonial 3
</div>
<div class="testimonial" data-index="4">
    Testimonial 4
</div>
<div class="testimonial" data-index="5">
    Testimonial 5
</div>

Wenn wir auf diejenigen zugreifen wollen, divsdie data-indexgrößer als 2dann sind, brauchen wir diese Abfrage.

$('div[class="testimonial"]').each(function(index,item){
    if(parseInt($(item).data('index'))>2){
        $(item).html('Testimonial '+(index+1)+' by each loop');
    }
});

Arbeitsbeispiel Geige

Manoj
quelle
29

Sie können es auf diese Weise tun

$('.testimonial').each(function(index, obj){
    //you can use this to access the current item
});
Ghyath Serhal
quelle
18

Mit .eq () von jQuery können Sie Elemente mit einem indizierten Ansatz durchlaufen.

var testimonialElements = $(".testimonial");
for(var i=0; i<testimonialElements.length; i++){
    var element = testimonialElements.eq(i);
    //do something with element
}
Atharva
quelle
1
Dies ist in der Tat der effizienteste Ansatz.
Amin Setayeshfar
17
divs  = $('.testimonial')
for(ind in divs){
  div = divs[ind];
  //do whatever you want
}
Ikostia
quelle
das gibt dir aber nicht die jquery-objekte, nur dom-elemente
celwell
1
@celwell kann nicht erwarten, dass jQuery alles für Sie erledigt. Es geht darum, ein eigenes jQuery-Objekt zu erstellen $(ind).
GoldBishop
14

Sie können dies präzise mit tun .filter. Im folgenden Beispiel werden alle Testimonial-Divs ausgeblendet, die das Wort "etwas" enthalten:

$(".testimonial").filter(function() {
    return $(this).text().toLowerCase().indexOf("something") !== -1;
}).hide();
karim79
quelle
10

Mit einer einfachen for-Schleife:

var testimonials= $('.testimonial');
for (var i = 0; i < testimonials.length; i++) {
  // Using $() to re-wrap the element.
  $(testimonials[i]).text('a');
}
Ismail Rubad
quelle
8

Ohne jQuery aktualisiert

document.querySelectorAll('.testimonial').forEach(function (element, index) {
    element.innerHTML = 'Testimonial ' + (index + 1);
});
<div class="testimonial"></div>
<div class="testimonial"></div>

KrisInception
quelle
Fast die gleiche Antwort ist bereits hier, ich denke, Sie sollten bestehende bearbeiten
Oleh Rybalchenko
8

Möglicherweise fehlt mir ein Teil der Frage, aber ich glaube, Sie können dies einfach tun:

$('.testimonial').each((index, element) => {
    if (/* Condition */) {
        // Do Something
    }
});

Hierbei wird jede Methode von jQuery verwendet: https://learn.jquery.com/using-jquery-core/iterating/

David Smith
quelle
6
$('.testimonal').each(function(i,v){
  if (condition) {
    doSomething();
  }
});
David
quelle
4

Etwas genauer:

$.each($('.testimonal'), function(index, value) { 
    console.log(index + ':' + value); 
});
Atif Tariq
quelle
Dies ist schön, wenn Sie gerne aus einer funktionaleren Perspektive lesen / schreiben.
Sgnl
4

In JavaScript ES6 .forEach () über eine Array-ähnliche NodeList- Auflistung vonElement.querySelectorAll()

document.querySelectorAll('.testimonial').forEach( el => {
  el.style.color = 'red';
  console.log( `Element ${el.tagName} with ID #${el.id} says: ${el.textContent}` );
});
<p class="testimonial" id="1">This is some text</p>
<div class="testimonial" id="2">Lorem ipsum</div>

Roko C. Buljan
quelle
Die Spread-Operator + Array-Notation wird nicht benötigt, doc..torAll.forEach()würde das doch genügen?
Aabbccsmith
Vielen Dank. Absolut. [...ArrayLike]wurde für die Zeit verwendet, für die querySelectorAll keine Unterstützung hatte .forEach. @aabbccsmith
Roko C. Buljan
2

Sie können die Methode jQuery $ each verwenden, um alle Elemente mit einem Klassenzeugnis zu durchlaufen. i => ist der Index des Elements in der Sammlung und val gibt Ihnen das Objekt dieses bestimmten Elements an. Mit "val" können Sie weiter auf die Eigenschaften Ihres Elements zugreifen und Ihren Zustand überprüfen.

$.each($('.testimonal'), function(i, val) { 
    if(your condition){
       //your action
    }
});
Nidhi Gupta
quelle