jQuery lặp qua các phần tử có cùng lớp


582

Tôi có một lượng div với lớp testimonialvà tôi muốn sử dụng jquery để lặp qua chúng để kiểm tra từng div nếu một điều kiện cụ thể là đúng. Nếu nó đúng, nó sẽ thực hiện một hành động.

Có ai biết làm thế nào tôi sẽ làm điều này?

Câu trả lời:


1052

Sử dụng mỗi: ' i' là tư thế trong mảng, objlà đối tượng DOM mà bạn đang lặp lại (cũng có thể được truy cập thông qua trình bao bọc jQuery $(this)).

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

Kiểm tra tài liệu tham khảo api để biết thêm thông tin.


2
Các chức năng với i, tham số obj giúp rất nhiều. Nếu chỉ mỗi cái được sử dụng thì nó không lặp lại.
darwindeed

2
@Darwindeed đúng! Hàm được sử dụng bởi iterator thực tế để xử lý từng mục. Trở về falsesẽ dừng lặp lại.
Kees C. Bakker

138
Điều đáng nói là "obj" sẽ là đối tượng dom, trong khi $ (this) là đối tượng jQuery.
AndreasT

Chúng ta không thể làm jQuery (cái này 'ul li'). Chiều dài để có được độ dài của các phần tử đó ul li?
techie_28

16
+1 để đề xuất $(this)truy cập vào đối tượng ... objlà đối tượng DOM không cho phép đính kèm các chức năng trực tiếp chẳng hạnobj.empty()
Fr0zenFyr

127

thử cái này...

$('.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;sẽ không phá vỡ. Bạn phải sử dụngreturn false;
Kolob Canyon

53

Ngày nay khá đơn giản để làm điều này mà không cần jQuery.

Không có jQuery:

Chỉ cần chọn các phần tử và sử dụng .forEach()phương thức để lặp lại chúng:

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

Trong các trình duyệt cũ hơn:

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

42

Hãy thử ví dụ này

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>

Khi chúng ta muốn truy cập vào những người divsdata-indexnhiều hơn 2thì chúng ta cần jquery này.

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

Ví dụ làm việc


29

bạn có thể làm theo cách này

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

18

.Eq () của jQuery có thể giúp bạn duyệt qua các phần tử với cách tiếp cận được lập chỉ mục.

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

1
Đây là cách tiếp cận hiệu quả nhất thực sự.
Amin Setayeshfar

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

điều đó không cung cấp cho bạn các đối tượng
vui nhộn

1
@celwell không thể mong đợi jQuery làm mọi thứ cho bạn. Đây là vấn đề tạo đối tượng jQuery của riêng bạn $(ind).
GoldBishop

14

Bạn có thể làm điều này một cách chính xác bằng cách sử dụng .filter. Ví dụ sau sẽ ẩn tất cả các div .testimonial có chứa từ "cái gì đó":

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

10

Với một vòng lặp đơn giản:

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

8

Không có jQuery cập nhật

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


hầu như câu trả lời tương tự đã có ở đây, tôi nghĩ bạn nên chỉnh sửa hiện tại
Oleh Rybalchenko


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

4

Chính xác hơn:

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

Điều này là tốt nếu bạn thích đọc / viết từ một quan điểm chức năng hơn.
Sgnl

4

Trong JavaScript ES6 .forEach () qua bộ sưu tập NodeList giống như mảng được cung cấp bởiElement.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>


Toán tử trải rộng + ký hiệu mảng là không cần thiết, chắc chắn làm doc..torAll.forEach()sẽ đủ?
aabbccsmith

Cảm ơn bạn. Chắc chắn rồi. [...ArrayLike]đã được sử dụng cho truy vấn thời gianSelector ALL không có hỗ trợ cho .forEach. @aabbccsmith
Roko C. Buljan 11/07/19

2

Bạn có thể sử dụng jQuery $ mỗi phương thức để lặp qua tất cả các phần tử với lời chứng thực lớp. i => là chỉ mục của phần tử trong bộ sưu tập và val cung cấp cho bạn đối tượng của phần tử cụ thể đó và bạn có thể sử dụng "val" để truy cập thêm vào các thuộc tính của phần tử và kiểm tra điều kiện của bạn.

$.each($('.testimonal'), function(i, val) { 
    if(your condition){
       //your action
    }
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.