Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 遍历jQuery对象数组_Javascript_Arrays_Jquery - Fatal编程技术网

Javascript 遍历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

我知道这已经被询问和回答了好几次了,但我仍然不知道在迭代jQuery数组时如何引用当前对象。例如,下面的代码给出了错误
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()
。确保它被包装在
$()
中,就像在
$(“#第二代,#第三代,#第四代”)中一样。谢谢你的帮助,帕特里克和马尔沃里奥!更正后的代码被添加到我原来的帖子中。