jQuery для перегляду елементів з тим самим класом


581

У мене є завантаження дівів з класом, testimonialі я хочу використовувати jquery, щоб переглядати їх, щоб перевірити для кожного div, чи відповідає певна умова. Якщо це правда, вона повинна виконати дію.

Хтось знає, як я це зробив?

Відповіді:


1051

Використовуйте кожне: ' i' - це позиція в масиві, objце об'єкт DOM, який ви повторюєте (можна отримати доступ і через оболонку jQuery $(this)).

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

Перегляньте посилання на api для отримання додаткової інформації.


2
Функція з параметрами i, obj дуже допомагає. Якщо просто використовували кожен, то це було не ітераційно.
darwindeeds

2
@Darwindeeds правильно! Функція використовується фактичним ітератором для обробки кожного елемента. Повернення falseзупинить ітерацію.
Kees C. Bakker

138
Варто зазначити, що "obj" буде об'єктом dom, тоді як $ (це) - об'єктом jQuery.
AndreasT

Не можемо зробити jQuery (це 'ul li') довжина, щоб отримати довжину цих елементів 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
FYI: 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');
    }
});

Робочий приклад


29

ви можете це зробити так

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

18

.eq () jQuery's може допомогти вам пройти елементи з індексованим підходом.

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 divs, що містять слово "щось":

$(".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]використовувався для запиту часуSelectorAll не підтримував .forEach. @aabbccsmith
Roko C.

2

Ви можете використовувати jQuery $ кожен метод, щоб проглянути всі елементи з відгуком про клас. i => - індекс елемента в колекції, а val дає вам об'єкт саме цього елемента, і ви можете використовувати "val" для подальшого доступу до властивостей вашого елемента та перевірки свого стану.

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