2011-01-07 26 views
2

Ich weiß, dass dies schon einige Male gestellt und beantwortet wurde, aber ich bin immer noch verwirrt darüber, wie ich beim Iterieren über ein jQuery-Array auf das aktuelle Objekt verweisen soll. Zum Beispiel gibt der folgende Code den Fehler TypeError: genH3Array[i].next is not a function. Was ist der richtige Weg, um auf das aktuelle Array-Objekt zu verweisen?Iterieren durch ein jQuery-Objektarray

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

EDIT: Vielen Dank für Ihre Hilfe, alle. Ich weiß, das war wahrscheinlich ein Kinderspiel für die meisten von euch, aber es war ein großer Kopfschmerz für mich. Der korrigierte Code ist unten:

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

Mit der Eigenschaft 'value' vermutlich. Dafür ist es da, oder? –

+0

Beachten Sie, dass genH3Array kein Array, sondern ein jQuery-Objekt ist. Das könnte der Grund sein, warum du Probleme mit dem [] und dem Index hast. Überprüfen Sie http://api.jquery.com/jQuery.each/. –

+0

Ich dachte auch darüber nach, aber ich bekomme den gleichen Fehler: "TypeError: value.next ist keine Funktion" – DeltaFox

Antwort

3

Dieser Teil:

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

... ist nicht wirklich die Art und Weise .push() gegen ein jQuery-Objekt zu verwenden. Wenn Sie einen Wert in .push() eingeben, sollte es ein DOM-Element sein. Kein jQuery-Objekt.

Sie konnten die gesamt bisschen wie folgt vereinfachen:

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

Jetzt werden Sie die .parent() alle drei in dem Objekt haben.

Nicht ganz sicher, was jeder tun soll, aber es scheint, als ob Sie versuchen, die nächsten drei Elemente von jedem zu nehmen, und fügen Sie sie nach einigen heading Element.

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

Ich weiß wirklich nicht, ob dies das ist, was Sie wollen. Es ist ein bisschen schwer zu sagen.

+0

Was Sie sagen, ist richtig, aber adressiert sein Problem nicht. Die Verwendung von eckigen Klammern in einem jQuery-Array führt jedoch immer zu dem Fehler, den er gerade sieht. – Malvolio

+0

@Malvolio: Technisch ist seine Verwendung der eckigen Klammern für zwei der Elemente korrekt, seit er vollständige jQuery-Objekte in das jQuery-Objekt geschoben hat. Da dies nicht der richtige Ansatz ist, habe ich versucht, den Code etwas konventioneller zu machen. Aber du hast Recht, dass der erste ein DOM-Element ist. – user113716

+0

Ich erhalte diesen TypeError nach der Verwendung der vereinfachten einzeiligen Deklaration, die Sie für genH3Array angegeben haben: TypeError: "# Generation_II, # Generation_III, # Generation_IV" .parent ist keine Funktion. Ich weiß nicht, ob ich das schon erwähnt habe, aber die Eltern eines jeden Objekts sind nicht die gleichen wie die Eltern der Elemente der anderen Generation. – DeltaFox

2

Sowohl value als auch this zeigen auf das aktuelle Element in der Iteration, aber das ist nicht Ihr Problem. Ihr Problem besteht darin, dass das von [] in einem jQuery-Objekt zurückgegebene Element kein jQuery-Objekt ist. Sie können dies tun:

$(genH3Array[i]).next() 
2

zu Hinzufügen was @patrick dw sagte: Sobald Sie den richtigen Wähler erhalten, können Sie die folgende Syntax verwenden:

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

Ich denke, was Sie wollen, ist

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

In $.each Callback, die this Variable zeigen auf das aktuelle Element. Wenn Sie ein jquery-Array wie das, was Sie haben, durchlaufen, wird es durch die dom-Elemente und nicht durch jQuery-Objekte iterieren. Daher müssen Sie die entsprechenden jQuery-Objekte mithilfe von $(this) ermitteln.

jQuery.each