jQuery do przechodzenia między elementami o tej samej klasie


581

Mam mnóstwo div z klasą testimoniali chcę użyć jquery, aby przejść przez nie w pętli, aby sprawdzić dla każdego div, czy określony warunek jest spełniony. Jeśli to prawda, powinien wykonać akcję.

Czy ktoś wie, jak bym to zrobił?

Odpowiedzi:


1051

Użyj każdego: „ i” jest pozycją w tablicy, objjest iterowanym obiektem DOM (można uzyskać do niego dostęp również przez opakowanie jQuery $(this)).

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

Sprawdź referencję interfejsu API, aby uzyskać więcej informacji.


2
Funkcja z parametrami i, obj bardzo pomaga. Jeśli użyto tylko każdego z nich, nie będzie to powtarzało się.
darwindeeds

2
@Darwindeeds poprawny! Funkcja jest używana przez rzeczywisty iterator do przetwarzania każdego elementu. Powrót falsespowoduje zatrzymanie iteracji.
Kees C. Bakker

138
Warto podkreślić, że „obj” będzie obiektem dom, a $ (this) jest obiektem jQuery.
AndreasT

Nie możemy zrobić jQuery (to 'ul li'). Długość, aby uzyskać długość tych elementów ul li?
techie_28,

16
+1 za sugerowanie $(this)dostępu do obiektu ... obiekt objDOM nie pozwala na przykład na bezpośrednie dołączanie funkcjiobj.empty()
Fr0zenFyr,

127

Spróbuj tego...

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


    if(condition){

    }


 });

4
FYI: break;nie złamie się. Musisz użyćreturn false;
Kolob Canyon

53

W dzisiejszych czasach jest to dość proste bez jQuery.

Bez jQuery:

Po prostu wybierz elementy i użyj .forEach()metody do iteracji nad nimi:

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

W starszych przeglądarkach:

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

42

Wypróbuj ten przykład

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>

Kiedy chcemy uzyskać dostęp do tych, divsktóre mają data-indexwięcej niż 2wtedy, potrzebujemy tej jquery.

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

Przykładowy skrzypce


29

możesz to zrobić w ten sposób

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

18

Funkcja .eq () jQuery może pomóc ci przechodzić przez elementy z podejściem indeksowanym.

var testimonialElements = $(".testimonial");
for(var i=0; i<testimonialElements.length; i++){
    var element = testimonialElements.eq(i);
    //do something with element
}

1
jest to rzeczywiście najbardziej efektywne podejście.
Amin Setayeshfar

17
divs  = $('.testimonial')
for(ind in divs){
  div = divs[ind];
  //do whatever you want
}

to nie daje ci obiektów jquery, tylko elementy dom
celwell

1
@celwell nie może oczekiwać, że jQuery zrobi wszystko za Ciebie. Chodzi o stworzenie własnego obiektu jQuery $(ind).
GoldBishop

14

Możesz to zrobić zwięźle, używając .filter. Poniższy przykład ukryje wszystkie div .testimonial zawierające słowo „coś”:

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

10

Dzięki prostej pętli for:

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

8

Bez aktualizacji jQuery

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


prawie ta sama odpowiedź jest już tutaj, myślę, że powinieneś edytować istniejące
Oleh Rybalchenko


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

4

Bardziej dokładnie:

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

Jest to miłe, jeśli lubisz czytać / pisać z bardziej funkcjonalnej perspektywy.
Sgnl

4

W JavaScript ES6 .forEach () nad podobną do tablicy kolekcją NodeList podaną przezElement.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>


Operator spread + notacja tablicowa nie jest potrzebna, czy na pewno doc..torAll.forEach()wystarczy?
aabbccsmith

Dziękuję Ci. Absolutnie. [...ArrayLike]był używany dla zapytania czasowego SelectorAll nie miał obsługi .forEach. @aabbccsmith
Roko C. Buljan

2

Możesz użyć metody jQuery $ each, aby przeglądać wszystkie elementy ze świadectwem klasy. i => to indeks elementu w kolekcji, a val daje obiekt tego konkretnego elementu i możesz użyć „val”, aby uzyskać dostęp do właściwości tego elementu i sprawdzić swój stan.

$.each($('.testimonal'), function(i, val) { 
    if(your condition){
       //your action
    }
});
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.