Javascript 遍历jQuery对象数组
我知道这已经被询问和回答了好几次了,但我仍然不知道在迭代jQuery数组时如何引用当前对象。例如,下面的代码给出了错误Javascript 遍历jQuery对象数组,javascript,arrays,jquery,Javascript,Arrays,Jquery,我知道这已经被询问和回答了好几次了,但我仍然不知道在迭代jQuery数组时如何引用当前对象。例如,下面的代码给出了错误TypeError:genH3Array[i]。next不是函数。引用当前数组对象的正确方法是什么 var genH3Array = $('#Generation_II').parent(); genH3Array.push($('#Generation_III').parent());; genH3Array.push($('#Generation_IV').p
TypeError:genH3Array[i]。next不是函数。引用当前数组对象的正确方法是什么
var genH3Array = $('#Generation_II').parent();
genH3Array.push($('#Generation_III').parent());;
genH3Array.push($('#Generation_IV').parent())
$.each(genH3Array, function(i, value)
{
if(genH3Array[i].next().attr("align") == "center")
{ genH3Array[i].next().next().next().insertBefore(heading.next())
}
genH3Array[i].next().next().insertBefore(heading.next())
genH3Array[i].next().insertBefore(heading.next())
})
编辑:谢谢大家的帮助。我知道这对你们大多数人来说都很容易,但对我来说却是一件非常头痛的事。更正代码如下:
var genH3Array = $('#Generation_II,#Generation_III,#Generation_IV').parent();
$.each(genH3Array, function(i, value)
{
console.log($(this).next());
if($(this).next().attr("align") == "center")
{
$(this).next().next().next().insertBefore(pokemonHeader.next())
}
$(this).next().next().insertBefore(pokemonHeader.next())
$(this).next().insertBefore(pokemonHeader.next())
$(this).insertBefore(pokemonHeader.next())
})
本部分:
var genH3Array = $('#Generation_II').parent();
genH3Array.push($('#Generation_III').parent());
genH3Array.push($('#Generation_IV').parent());
…实际上不是对jQuery对象使用.push()
的方法。当您在中.push()
一个值时,它应该是一个DOM元素。不是jQuery对象
你可以这样简化整个过程:
var genH3Array = $('#Generation_II,#Generation_III,#Generation_IV').parent();
现在,您将拥有对象中所有三个的.parent()
不完全确定每个元素应该做什么,但似乎您正在尝试获取每个元素的下三个元素,并将它们插入到某个标题
元素之后
$.each(genH3Array, function(i, value) {
if($(this).next().attr("align") == "center") {
heading.after( $(this).nextUntil('sometarget:last') );
}
heading.after( $(this).nextUntil('sometarget') );
});
我真的不知道这是不是你想要的。有点难说。值和这都指向迭代中的当前项,但这不是您的问题。您的问题是[]在jQuery对象上返回的项不是jQuery对象。您可以这样做:
$(genH3Array[i]).next()
添加@patrick dw所说的内容:一旦获得正确的选择器,就可以使用以下语法:
var getH3Array = ('#Generation_II,#Generation_III,#Generation_IV').parent().each(function() {
$(this); // this references the dom element matched, so:
if($(this).next().attr("align") == "center") {
// do something here
}
});
我想你想要的是
var array = $("#c1, #c2, #c3").parent();
$.each(array, function(){
console.log($(this).next());
});
在$中。每个回调中,this
变量指向当前元素。如果您像现在这样迭代jquery数组,那么它将迭代dom元素而不是jquery对象,因此您需要使用$(this)
获得与它们对应的jquery对象
使用值属性。这就是它的用途,不是吗?请注意,genH3Array不是数组,而是jQuery对象。这可能就是您在[]和下标方面遇到问题的原因。我也想到了,但我得到了同样的错误:“TypeError:value.next不是函数”,因为value
是一个DOM对象。从中像$(value).next()
..那样形成一个jQuery对象,而不是.insertBefore(pokemonHeader.next())
,看起来您可以这样做.insertAfter(pokemonHeader)
,因为pokemonHeader
后面的下一项将放在pokemonHeader
后面。只是一个想法;o) 你说的是对的,但没有解决他的问题。在jQuery数组上使用方括号,无论是如何创建的,都会导致他看到的错误。@Malvolio:从技术上讲,他对其中两项使用方括号是正确的,因为他将完整的jQuery对象推入jQuery对象。因为这不是正确的方法,所以我试图将代码转换成更传统的方式。但是你是对的,第一个是DOM元素。在使用了你为genH3Array提供的简化的一行声明之后,我得到了这个TypeError:TypeError:“#Generation_II,#Generation_III,#Generation_IV”。parent不是一个函数。我不知道我以前是否提到过这一点,但每个对象的父对象与其他生成元素的父对象不同。@DeltaFox:如果父元素相同,则不重要。但是根据您的注释中的错误,看起来您正在对字符串调用parent()
。确保它被包装在$()
中,就像在$(“#第二代,#第三代,#第四代”)中一样代码>。谢谢你的帮助,帕特里克和马尔沃里奥!更正后的代码被添加到我原来的帖子中。