我有一些具有相同类的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">
为什么它不起作用,我该怎么做才能使它发挥作用?
答案 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;
}
}