jQuery untuk mengulang elemen-elemen dengan kelas yang sama


582

Saya punya banyak divs dengan kelas testimonialdan saya ingin menggunakan jquery untuk mengulanginya untuk memeriksa setiap div jika kondisi tertentu benar. Jika itu benar, ia harus melakukan suatu tindakan.

Adakah yang tahu bagaimana saya akan melakukan ini?

Jawaban:


1052

Gunakan masing-masing: ' i' adalah posisi dalam array, objadalah objek DOM yang Anda iterasi (dapat diakses melalui pembungkus jQuery $(this)juga).

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

Periksa referensi api untuk informasi lebih lanjut.


2
Fungsi dengan saya, parameter obj sangat membantu. Jika hanya masing-masing digunakan maka itu tidak berulang.
darwindeeds

2
@Darwindeeds benar! Fungsi ini digunakan oleh iterator yang sebenarnya untuk memproses setiap item. Pengembalian falseakan menghentikan iterasi.
Kees C. Bakker

138
Perlu ditunjukkan, bahwa "obj" akan menjadi objek dom, sedangkan $ (ini) adalah objek jQuery.
AndreasT

Tidak bisakah kita melakukan jQuery (ini 'ul li'). Panjang untuk mendapatkan panjang elemen itu ul li?
techie_28

16
+1 untuk menyarankan $(this)untuk mengakses objek ... objmenjadi objek DOM tidak memungkinkan untuk melampirkan fungsi secara langsung misalnyaobj.empty()
Fr0zenFyr

127

coba ini...

$('.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;tidak akan pecah. Anda harus menggunakanreturn false;
Kolob Canyon

53

Sangat mudah untuk melakukan ini tanpa jQuery hari ini.

Tanpa jQuery:

Cukup pilih elemen dan gunakan .forEach()metode untuk beralih di atasnya:

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

Di browser lama:

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

42

Coba contoh ini

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>

Ketika kita ingin mengakses divsyang data-indexlebih besar dari 2itu, kita memerlukan jquery ini.

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

Contoh biola yang bekerja


29

kamu bisa melakukannya dengan cara ini

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

18

.eq () jQuery dapat membantu Anda menelusuri elemen dengan pendekatan yang diindeks.

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

1
ini memang pendekatan yang paling efisien.
Amin Setayeshfar

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

itu tidak memberi Anda objek jquery, hanya elemen dom
celwell

1
@celwell tidak bisa berharap jQuery melakukan segalanya untuk Anda. Ini adalah masalah membuat Obyek jQuery Anda sendiri $(ind).
GoldBishop

14

Anda dapat melakukan ini secara ringkas menggunakan .filter. Contoh berikut akan menyembunyikan semua div .testimonial yang berisi kata "sesuatu":

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

10

Dengan loop sederhana:

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

8

Tanpa jQuery diperbarui

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


jawaban yang hampir sama sudah ada di sini, saya pikir Anda harus mengedit yang ada
Oleh Rybalchenko



4

Lebih tepat:

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

Ini bagus jika Anda suka membaca / menulis dari perspektif yang lebih fungsional.
Sgnl

4

Dalam JavaScript ES6 .forEach () di atas koleksi NodeList seperti array yang diberikan olehElement.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>


Notasi operator array + array tidak diperlukan, pasti melakukan doc..torAll.forEach()sudah cukup?
aabbccsmith

Terima kasih. Benar. [...ArrayLike]telah digunakan untuk query timeSelectorAll tidak memiliki dukungan untuk .forEach. @aabbccsmith
Roko C. Buljan

2

Anda bisa menggunakan jQuery $ setiap metode untuk mengulang semua elemen dengan testimonial kelas. i => adalah indeks elemen dalam koleksi dan val memberi Anda objek elemen tertentu dan Anda dapat menggunakan "val" untuk lebih lanjut mengakses properti elemen Anda dan memeriksa kondisi Anda.

$.each($('.testimonal'), function(i, val) { 
    if(your condition){
       //your action
    }
});
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.