2011-01-07 166 views
2

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

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

有了`value`属性,推测是。这就是它的目的,不是吗? – 2011-01-07 02:45:38

+0

请注意,genH3Array不是一个数组,而是一个jQuery对象。这可能是你为什么遇到[]和下标有问题的原因。查看http://api.jquery.com/jQuery.each/。 – 2011-01-07 02:46:31

回答

3

这一部分:

var genH3Array = $('#Generation_II').parent(); 
    genH3Array.push($('#Generation_III').parent()); 
    genH3Array.push($('#Generation_IV').parent()); 

...是不是真的用.push()对jQuery对象的方式。当你在.push()的某个值中,它应该是一个DOM元素。不是一个jQuery对象。

您可以简化整个有点像这样:

var genH3Array = $('#Generation_II,#Generation_III,#Generation_IV').parent(); 

现在你要在对象的所有三个.parent()

不完全确定每个应该做什么,但它似乎是你想要采取每一个的下三个元素,并将它们插入一些heading元素之后。我不知道这是不是你想要的。这有点难以分辨。

2

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

$(genH3Array[i]).next() 
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 
    } 
}); 
0

我想你想要的是

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

$.each回调中,this变量指向当前元素。如果您正在遍历jquery数组,那么它将遍历dom元素而不是jQuery对象,因此您需要使用$(this)来获取与它们对应的jQuery对象。

jQuery.each