jQuery для циклического прохождения элементов с одинаковым классом - PullRequest
507 голосов
/ 19 января 2011

У меня есть загрузка div с классом testimonial, и я хочу использовать jquery, чтобы пройти через них, чтобы проверить для каждого div, выполняется ли определенное условие.Если это правда, он должен выполнить действие.

Кто-нибудь знает, как я это сделаю?

Ответы [ 14 ]

919 голосов
/ 19 января 2011

Используйте каждое: 'i' - это положение в массиве, obj - это объект DOM, который вы итерируете (можно также получить доступ через оболочку jQuery $(this)).

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

Обратитесь к справочнику API для получения дополнительной информации.

109 голосов
/ 19 января 2011

попробуйте это ...

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


    if(condition){

    }


 });
47 голосов
/ 23 января 2015

В наши дни довольно просто сделать это без jQuery.

Без jQuery:

Просто выберите элементы и используйте метод .forEach() для их перебора:

var testimonials = document.querySelectorAll('.testimonial');
Array.prototype.forEach.call(testimonials, function(elements, index) {
    // conditional here.. access elements
});
40 голосов
/ 13 апреля 2015

Попробуйте этот пример

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>

Когда мы хотим получить доступ к тем divs, у которых data-index больше 2, тогда нам нужен этот jquery.

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

Рабочий пример скрипки

27 голосов
/ 19 января 2011

вы можете сделать это так

$('.testimonial').each(function(index, obj){
    //you can use this to access the current item
});
17 голосов
/ 19 января 2011
divs  = $('.testimonial')
for(ind in divs){
  div = divs[ind];
  //do whatever you want
}
14 голосов
/ 09 декабря 2013

.eq () * jQuery может помочь вам пройти через элементы с индексированным подходом.

var testimonialElements = $(".testimonial");
for(var i=0; i<testimonialElements.length; i++){
    var element = testimonialElements.eq(i);
    //do something with element
}
13 голосов
/ 19 января 2011

Вы можете сделать это кратко, используя .filter. В следующем примере будут скрыты все элементы .testimonial, содержащие слово «что-то»:

$(".testimonial").filter(function() {
    return $(this).text().toLowerCase().indexOf("something") !== -1;
}).hide();
10 голосов
/ 20 января 2017

С простым циклом for:

var testimonials= $('.testimonial');
for (var i = 0; i < testimonials.length; i++) {
  // Using $() to re-wrap the element.
  $(testimonials[i]).text('a');
}
8 голосов
/ 19 января 2011

Возможно, мне не хватает части вопроса, но я верю, что вы можете просто сделать это:

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

Используется каждый метод jQuery: https://learn.jquery.com/using-jquery-core/iterating/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...