jQuery to loop through elements with the same class

JavascriptJqueryJquery Selectors

Javascript Problem Overview


I have a load of divs with the class testimonial and I want to use jquery to loop through them to check for each div if a specific condition is true. If it is true, it should perform an action.

Does anyone know how I would do this?

Javascript Solutions


Solution 1 - Javascript

Use each: 'i' is the postion in the array, obj is the DOM object that you are iterating (can be accessed through the jQuery wrapper $(this) as well).

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

Check the api reference for more information.

Solution 2 - Javascript

try this...

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

    if(condition){

    }


 });

Solution 3 - Javascript

It's pretty simple to do this without jQuery these days.

Without jQuery:

Just select the elements and use the .forEach() method to iterate over them:

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

In older browsers:

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

Solution 4 - Javascript

Try this example

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>

When we want to access those divs which has data-index greater than 2 then we need this jquery.

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

Working example fiddle

Solution 5 - Javascript

you can do it this way

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

Solution 6 - Javascript

jQuery's .eq() can help you traverse through elements with an indexed approach.

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

Solution 7 - Javascript

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

Solution 8 - Javascript

I may be missing part of the question, but I believe you can simply do this:

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

This uses jQuery's each method: https://learn.jquery.com/using-jquery-core/iterating/

Solution 9 - Javascript

You can do this concisely using .filter. The following example will hide all .testimonial divs containing the word "something":

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

Solution 10 - Javascript

With a simple for loop:

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

Solution 11 - Javascript

Without jQuery updated

document.querySelectorAll('.testimonial').forEach(function (element, index) {
    element.innerHTML = 'Testimonial ' + (index + 1);
});

<div class="testimonial"></div>
<div class="testimonial"></div>

Solution 12 - Javascript

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

Solution 13 - Javascript

In JavaScript ES6 .forEach() over an array-like NodeList collection given by Element.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>

Solution 14 - Javascript

You could use the jQuery $each method to loop through all the elements with class testimonial. i => is the index of the element in collection and val gives you the object of that particular element and you can use "val" to further access the properties of your element and check your condition.

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

Solution 15 - Javascript

More precise:

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questiongeoffs3310View Question on Stackoverflow
Solution 1 - JavascriptKees C. BakkerView Answer on Stackoverflow
Solution 2 - Javascriptstephen776View Answer on Stackoverflow
Solution 3 - JavascriptJosh CrozierView Answer on Stackoverflow
Solution 4 - JavascriptManojView Answer on Stackoverflow
Solution 5 - JavascriptGhyath SerhalView Answer on Stackoverflow
Solution 6 - JavascriptAtharvaView Answer on Stackoverflow
Solution 7 - JavascriptikostiaView Answer on Stackoverflow
Solution 8 - JavascriptDavid SmithView Answer on Stackoverflow
Solution 9 - Javascriptkarim79View Answer on Stackoverflow
Solution 10 - JavascriptIsmail RubadView Answer on Stackoverflow
Solution 11 - JavascriptKrisInceptionView Answer on Stackoverflow
Solution 12 - JavascriptdavinView Answer on Stackoverflow
Solution 13 - JavascriptRoko C. BuljanView Answer on Stackoverflow
Solution 14 - JavascriptNidhi GuptaView Answer on Stackoverflow
Solution 15 - JavascriptAtif TariqView Answer on Stackoverflow