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?

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.


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){

    }


 });

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
});

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


29

Sie können es auf diese Weise tun

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

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
}

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
}

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();

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');
}

8

Ohne jQuery aktualisiert

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


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


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

4

Etwas genauer:

$.each($('.testimonal'), function(index, value) { 
    console.log(index + ':' + value); 
});

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>


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
    }
});
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.