迭代jQuery对象数组

时间:2011-01-07 02:43:33

标签: javascript arrays jquery

我知道这已被问过并已经回答了几次,但我仍然对如何在迭代jQuery数组时引用当前对象感到困惑。例如,以下代码给出了错误TypeError: genH3Array[i].next is not a function。引用当前数组对象的正确方法是什么?

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())
        })

4 个答案:

答案 0 :(得分:3)

这部分:

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()

不完全确定每个应该做什么,但似乎你正在尝试接受每个元素的下三个元素,并在一些heading元素之后插入它们。

$.each(genH3Array, function(i, value) {
        if($(this).next().attr("align") == "center") {                    
            heading.after( $(this).nextUntil('sometarget:last') );
        }
        heading.after( $(this).nextUntil('sometarget') );
    });

我真的不知道这是不是你想要的。这有点难以辨别。

答案 1 :(得分:2)

valuethis都指向迭代中的当前项,但这不是您的问题。您的问题是[]在jQuery对象上返回的项目不是 jQuery对象。你可以这样做:

$(genH3Array[i]).next() 

答案 2 :(得分:2)

添加@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
    }
});

答案 3 :(得分:0)

我认为你想要的是

var array = $("#c1, #c2, #c3").parent();
$.each(array, function(){
    console.log($(this).next());
});

$.each回调中,this变量指向当前元素。如果你像你所拥有的那样遍历一个jquery数组,它将遍历dom元素而不是jQuery对象,所以你需要使用$(this)来获取与它们对应的jQuery对象。

jQuery.each