使用.each迭代同一类的html元素

时间:2016-09-27 19:26:27

标签: javascript jquery html arrays

我有一些具有相同类的div元素。我想迭代它们。我正在使用jquery" .each"为了做到这一点。我还想单独访问每个元素并将其类设为toogle,因此我需要获取类元素数组中元素的索引。我目前有一个类似的代码:

 $('.the_div_class').each(function(i, obj) {

   if("a certain condition") {

    $('.the_div_class')[0].toggleClass('other_div_class'); // trying to access the index 0 of the array that contains the elements of that class;

   }

 }

但是我收到错误说#34; $(...)[0] .toggleClass不是函数"。如果我没有指定索引,我会将数组中的所有元素都设置为...我在控制台上记录" $(' .the_div_class')"数组并获得类似于此的结构:

[div.the_div_class, div.the_div_class, div.the_div_class, div.the_div_class, div.the_div_class, prevObject: r.fn.init[1]]

如果我是console.log" $(' .the_div_class')[0]"我明白了:

<div class="the_div_class">

为什么它不起作用,我该怎么做才能使它发挥作用?

4 个答案:

答案 0 :(得分:2)

代码$('.the_div_class')[0]只会获得与DOM中的那个选择器匹配的第一个元素与天真的,它不起作用,因为它不再是一个jQuery对象(因此它没有方法.toggleClass() )。在.each()内,您可以使用this来引用当前正在迭代的元素:

 $('.the_div_class').each(function(i, obj) {

   if("a certain condition") {

    $(this).toggleClass('other_div_class'); 

   }

 }

注意:要通过jQuery中的索引获取项目,可以使用.get()。例如:

 $('.the_div_class').get(0).toggleClass('other_div_class'); 

答案 1 :(得分:1)

将您的代码更改为:

var collection = $('.the_div_class');
collection.each(function(i, obj) {

   if("a certain condition") {
      $(collection[0]).toggleClass('other_div_class'); // trying to access the index 0 of the array that contains the elements of that class;
   }
}

您需要通过再次将DOM元素传递给$来重新创建jQuery对象,即$($(&#39; .the_div_class&#39;)[0])代码。

答案 2 :(得分:0)

当您指定索引时,您将获取使用jQuery而不是jQuery对象选择的普通javascript元素。这就是你无法使用toggleClass()方法的原因。

你可以将它包装在jQuery中,就像这个$($(selector)[i])将它转换回jQuery对象。但是,每个循环提供的参数都是你的朋友。也就是说,您可以使用$(obj)。

访问循环中的当前对象

答案 3 :(得分:0)

您需要使用以下关键字更改代码以获取元素:

$('.the_div_class').each(function(i, obj) {
   if("a certain condition") {
    $(this).toggleClass('other_div_class'); // trying to access the index 0 of the array that contains the elements of that class;
   }
 }