jQuery для циклического прохождения элементов с одинаковым классом

373

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

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

Теги:
jquery-selectors

13 ответов

654
Лучший ответ

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

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

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

  • 2
    Очень помогает функция с параметрами i, obj. Если только каждый использовался, то это не было повторением.
  • 1
    @Darwindeeds правильно! Функция используется фактическим итератором для обработки каждого элемента. Возвращение false остановит итерацию.
Показать ещё 7 комментариев
87

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

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


    if(condition){

    }


 });
  • 2
    К вашему сведению: break; не сломается. Вы должны использовать return false;
29

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

Без jQuery:

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

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

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

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

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

22

вы можете сделать это таким образом

$('.testimonial').each(function(index, obj){
    //you can use this to access the current item
});
15
divs  = $('.testimonial')
for(ind in divs){
  div = divs[ind];
  //do whatever you want
}
  • 0
    это не дает вам объекты JQuery, а просто элементы DOM
  • 0
    @celwell не может ожидать, что jQuery сделает все за вас. Это вопрос создания вашего собственного объекта jQuery $(ind) .
12

Вы можете сделать это кратко, используя .filter. В следующем примере будут скрыты все .testimonial divs, содержащие слово "something":

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

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

var testimonialElements = $(".testimonial");
for(var i=0; i<testimonialElements.length; i++){
    var element = testimonialElements.eq(i);
    //do something with element
}
  • 1
    это действительно самый эффективный подход.
7

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

$('.testimonial').each(function() {
    if(...Condition...) {
        ...Do Stuff...
    }
}
5
$('.testimonal').each(function(i,v){
  if (condition) {
    doSomething();
  }
});
2

Без обновления jQuery

document.querySelectorAll('.testimonial').forEach(function (element, index) {
    element.innerHTML = 'Testimonial ' + (index + 1);
});
<div class="testimonial"></div>
<div class="testimonial"></div>
  • 0
    почти такой же ответ уже здесь, я думаю, вы должны редактировать существующие
2

С помощью простого цикла:

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

Более точно:

$.each($('.testimonal'), function(index, value) { 
    console.log(index + ':' + value); 
});
  • 3
    Почему точнее?
  • 0
    Это хорошо, если вам нравится читать / писать с более функциональной точки зрения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню