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


582

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

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

Ответы:


1052

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

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

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


2
Очень помогает функция с параметрами i, obj. Если только каждый использовался, то это не было повторением.
darwindeeds

2
@Darwindeeds правильно! Функция используется фактическим итератором для обработки каждого элемента. Возвращение falseостановит итерацию.
Кис К. Баккер

138
Стоит отметить, что obj будет объектом dom, а $ (this) - объектом jQuery.
AndreasT

Можем ли мы сделать jQuery (это 'ul li'). Length, чтобы получить длину этих элементов ul li?
techie_28

16
+1 за предложение $(this)доступа к объекту ... так objкак объект DOM не позволяет, например, напрямую присоединять функцииobj.empty()
Fr0zenFyr

127

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

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


    if(condition){

    }


 });

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

53

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

Без jQuery:

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

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

В старых браузерах:

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

42

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

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

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



18

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

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

1
это действительно самый эффективный подход.
Амин Сетайешфар

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

это не дает вам объекты jquery, а только элементы dom
celwell

1
@celwell не может ожидать, что jQuery сделает все за вас. Это вопрос создания вашего собственного объекта jQuery $(ind).
GoldBishop

14

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

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

10

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

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

8

Без обновленного jQuery

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


почти такой же ответ уже здесь, я думаю, вы должны отредактировать существующий
Олег Рыбальченко



4

Точнее:

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

Это хорошо, если вам нравится читать / писать с более функциональной точки зрения.
Sgnl

4

В JavaScript ES6 .forEach () для массива-подобной коллекции NodeList, заданной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>


Оператор спрэда + запись массива не нужны, конечно, делать doc..torAll.forEach()будет достаточно?
aabbccsmith

Спасибо. Абсолютно. [...ArrayLike]был использован в то время, когда querySelectorAll не имел поддержки .forEach. @aabbccsmith
Роко С.

2

Вы можете использовать метод jQuery $ each для циклического прохождения всех элементов со свидетельством класса. i => - индекс элемента в коллекции, и val дает вам объект этого конкретного элемента, и вы можете использовать «val» для дальнейшего доступа к свойствам вашего элемента и проверки вашего состояния.

$.each($('.testimonal'), function(i, val) { 
    if(your condition){
       //your action
    }
});
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.