jQuery aynı sınıfa sahip öğeler arasında geçiş yapmak için


582

testimonialDiv sınıfı ile bir yük var ve belirli bir koşul doğru olup olmadığını her div için denetlemek için döngü aracılığıyla jquery kullanmak istiyorum. Doğruysa, bir eylem gerçekleştirmelidir.

Bunu nasıl yapacağımı bilen var mı?

Yanıtlar:


1052

Her birini kullanın: ' i' dizideki objkonumdur, yinelemekte olduğunuz DOM nesnesidir (jQuery sarmalayıcısıyla da erişilebilir $(this)).

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

Kontrol API referansı Daha fazla bilgi için.


2
İ, obj parametreleri ile fonksiyon çok yardımcı olur. Sadece her biri kullanılmışsa, o zaman tekrarlayan değildi.
darwindeeds

2
@Darwindeeds doğru! İşlev, her öğeyi işlemek için gerçek yineleyici tarafından kullanılır. Geri dönmek falseyinelemeyi durduracaktır.
Kees C.Bakker

138
$ (This) jQuery nesnesi iken, "obj" dom nesnesi olacağını belirtmek gerekir.
AndreasT

JQuery (bu 'ul li') yapamayız. Bu elementlerin uzunluğunu almak için uzunluk ul li?
techie_28

16
+1 $(this), nesneye erişmeyi önerdiği için ... objDOM nesnesi olmak, örneğin doğrudan işlev obj.empty()
eklemesine

127

bunu dene...

$('.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;kırılmaz. Kullanmalısınızreturn false;
Kolob Kanyonu

53

Bunu bugünlerde jQuery olmadan yapmak oldukça basit.

JQuery olmadan:

Sadece öğeleri seçin ve üzerinde yineleme yapmak için .forEach()yöntemi kullanın:

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

Daha eski tarayıcılarda:

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

42

Bu örneği deneyin

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>

O divszamandan data-indexdaha büyük olanlara erişmek istediğimizde 2bu jquery'ye ihtiyacımız var.

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

Çalışma örneği keman


29

bu şekilde yapabilirsin

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

18

jQuery'nin .eq () öğesi, dizin oluşturulmuş bir yaklaşımla öğeler arasında geçiş yapmanıza yardımcı olabilir.

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

1
bu gerçekten de en etkili yaklaşım.
Amin Setayeshfar

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

Bu size jquery nesneleri vermiyor, sadece dom elemanları
celwell

1
@celwell jQuery'nin sizin için her şeyi yapmasını bekleyemez. Kendi jQuery Nesnenizi yapma meselesidir $(ind).
GoldBishop

14

Bunu kısaca kullanarak yapabilirsiniz .filter. Aşağıdaki örnek, "bir şey" kelimesini içeren tüm .testimonial div öğelerini gizleyecektir:

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

10

Basit bir döngü ile:

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

8

JQuery güncellenmeden

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


hemen hemen aynı cevap zaten burada, bence mevcut düzenlemek gerekir
Oleh Rybalchenko


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

4

Daha kesin:

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

Daha işlevsel bir perspektiften okuma / yazmayı seviyorsanız bu hoş.
Sgnl

4

JavaScript ES6 .forEach () tarafından verilen bir dizi benzeri NodeList koleksiyonu üzerindenElement.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>


Forma operatörü + dizi gösterimi gerekli değildir, kesinlikle yapmak doc..torAll.forEach()yeterli olur mu?
aabbccsmith

Teşekkür ederim. Kesinlikle. [...ArrayLike]querySelectorAll için destek almadığı zaman için kullanıldı .forEach. @aabbccsmith
Roko C. Buljan

2

Sınıf referansı ile tüm öğeler arasında döngü için jQuery $ each yöntemini kullanabilirsiniz. i => koleksiyondaki öğenin dizinidir ve val size o öğenin nesnesini verir ve öğenizin özelliklerine daha fazla erişmek ve durumunuzu kontrol etmek için "val" kullanabilirsiniz.

$.each($('.testimonal'), function(i, val) { 
    if(your condition){
       //your action
    }
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.