2011-01-07 165 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