jQuery遍历具有相同类的元素


581

我的类中有很多div,testimonial并且我想使用jquery遍历它们以检查每个div是否满足特定条件。如果为真,则应执行一个操作。

有人知道我会怎么做吗?

Answers:


1051

使用每个:' i'是数组中的位置,obj是您要迭代的DOM对象(也可以通过jQuery包装器进行访问$(this))。

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

检查api参考以获取更多信息。


2
带有i,obj参数的函数有很大帮助。如果只使用每个,那么它就不会迭代。
darwindeeds 2012年

2
@Darwindeeds正确!实际的迭代器使用该函数来处理每个项目。返回false将停止迭代。
Kees C. Bakker 2012年

138
值得指出的是,“ obj”将是dom对象,而$(this)是jQuery对象。
AndreasT 2012年

不能我们做jQuery(this'ul li')。length来获取元素ul li的长度吗?
techie_28 2012年

16
+1表示建议$(this)访问该对象... obj作为DOM对象,不允许直接附加函数,例如obj.empty()
Fr0zenFyr 2015年

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;
Kolob峡谷

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

jQuery的.eq()可以帮助您使用索引方法遍历元素。

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

1
这确实是最有效的方法。
Amin Setayeshfar

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

但这并没有给您jquery对象,只是dom元素
celwell 2014年

1
@celwell不能指望jQuery为您做所有事情。这是制作自己的jQuery Object的问题$(ind)
GoldBishop

14

您可以使用简洁地进行此操作.filter。下面的示例将隐藏所有包含单词“ something”的.testimonial div:

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


8

没有更新jQuery

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


几乎相同的答案已经在这里,我想您应该编辑现有的文件
Oleh Rybalchenko '17


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


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
Roko C. Buljan

2

您可以使用jQuery $ each方法遍历所有带有类推荐的元素。i =>是元素在集合中的索引,并且val为您提供该特定元素的对象,并且您可以使用“ val”进一步访问元素的属性并检查条件。

$.each($('.testimonal'), function(i, val) { 
    if(your condition){
       //your action
    }
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.