jQuery per scorrere gli elementi con la stessa classe


582

Ho un sacco di div con la classe testimoniale voglio usare jquery per scorrere attraverso di loro per verificare ogni div se una condizione specifica è vera. Se è vero, dovrebbe eseguire un'azione.

Qualcuno sa come lo farei?

Risposte:


1052

Usa ognuna: ' i' è la posizione nell'array, objè l'oggetto DOM che stai ripetendo (è possibile accedere anche tramite il wrapper jQuery $(this)).

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

Controlla il riferimento api per ulteriori informazioni.


2
La funzione con i parametri obj aiuta molto. Se solo ciascuno è stato usato, non stava ripetendo.
darwindeeds,

2
@Darwindeeds correct! La funzione viene utilizzata dall'iteratore effettivo per elaborare ciascun elemento. Il ritorno falseinterromperà l'iterazione.
Kees C. Bakker,

138
Vale la pena sottolineare che "obj" sarà l'oggetto dom, mentre $ (questo) è l'oggetto jQuery.
AndreasT

Non possiamo fare jQuery (questo 'ul li'). Lunghezza per ottenere la lunghezza di quegli elementi ul li?
techie_28,

16
+1 per aver suggerito $(this)di accedere all'oggetto ... objessere oggetto DOM non consente di collegare direttamente funzioni ad esempioobj.empty()
Fr0zenFyr

127

prova questo...

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


    if(condition){

    }


 });

4
Cordiali saluti: break;non si romperà. Devi usarereturn false;
Kolob Canyon il

53

Al giorno d'oggi è abbastanza semplice farlo senza jQuery.

Senza jQuery:

Basta selezionare gli elementi e utilizzare il .forEach()metodo per scorrere su di essi:

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

Nei browser più vecchi:

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

42

Prova questo esempio

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>

Quando vogliamo accedere a quelli divsche sono data-indexpiù grandi di 2allora abbiamo bisogno di questo jquery.

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

Esempio di violino funzionante


29

puoi farlo in questo modo

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

18

Il .eq () di jQuery può aiutarti a attraversare elementi con un approccio indicizzato.

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

1
questo è l'approccio più efficace.
Amin Setayeshfar,

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

questo non ti dà gli oggetti jquery, solo elementi dom
celwell

1
@celwell non può aspettarsi che jQuery faccia tutto per te. Si tratta di creare il tuo oggetto jQuery $(ind).
GoldBishop

14

Puoi farlo concisamente usando .filter. L'esempio seguente nasconderà tutti i div .testimonial contenenti la parola "qualcosa":

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

10

Con un semplice ciclo per:

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

8

Senza jQuery aggiornato

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


quasi la stessa risposta è già qui, penso che dovresti modificare gli esistenti
Oleh Rybalchenko,


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

4

Più preciso:

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

Questo è bello se ti piace leggere / scrivere da una prospettiva più funzionale.
Sgnl,

4

In JavaScript ES6 .forEach () su una raccolta NodeList simile a un array fornita daElement.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>


L'operatore di diffusione + notazione di array non è necessario, sicuramente doc..torAll.forEach()sarebbe sufficiente?
aabbccsmith

Grazie. Assolutamente. [...ArrayLike]è stato usato per il tempo querySelectorTutti non avevano supporto per .forEach. @aabbccsmith
Roko C. Buljan,

2

È possibile utilizzare jQuery $ ogni metodo per scorrere tutti gli elementi con testimonial di classe. i => è l'indice dell'elemento nella raccolta e val ti dà l'oggetto di quel particolare elemento e puoi usare "val" per accedere ulteriormente alle proprietà del tuo elemento e controllare la tua condizione.

$.each($('.testimonal'), function(i, val) { 
    if(your condition){
       //your action
    }
});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.