2011-01-07 18 views
1

ich eine Reihe von div-Tags in der folgenden Struktur:DIVs Looping über jQuery

<div id="team"> 

     <div class="member"> 
      <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p> 
     </div> 

     <div class="member"> 
      <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p> 
     </div>  

     <div class="member"> 
      <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p> 
     </div>  

     <div class="member"> 
      <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p> 
     </div> 

    </div> 

Ich möchte über jeden div jQuery Schleife verwenden, und eine Klasse von floatLeft aus (wenn es ein noch div ist) und floatRight (wenn es ungerade ist). Ich versuchte es mit dem folgenden Code zu tun, aber es hat floatLeft und floatRight all divs ...

var $el,i,$selectedDivs,count; 

    $selectedDivs = $('#team > div'); 
    count = $selectedDivs.length; 

    $selectedDivs.each(function() { 
     $el = $(this); 

     for (i=0; i<=count; i++) { 
      if (i % 2 == 0) { 
       $el.addClass('floatLeft'); 
      } 
      else { 
       $el.addClass('floatRight'); 
      } 
     } 
    }); 

Ich vermute, es ist wegen der .each() Funktion ist ... Meine Frage ist. Da $ selectedDivs NICHT ein Array ist, wie kann ich jedes dieser divs mit einer for-Schleife anstelle der .each() - Funktion durchlaufen? Ich möchte es absichtlich verwenden, anstatt jQuerys .odd() und: ungerade Fähigkeiten ...

Vielen Dank! Amit

+0

Ich vermute hier, aber ich denke, Sie sollten nicht ohne die> – JCOC611

Antwort

2

Sie sollten entweder eine for Schleife oder each, aber nicht beide verwenden. In einer for Schleife können Sie schreiben.

+0

„#Team> div“, sondern „#Team div“ verwenden Ja, das tat es. Vielen Dank. Ich habe mich gefragt, wie ich das i-te Element in die for-Schleife integrieren soll, jetzt erinnere ich mich an den eq (i) -Teil. wunderbar. – Amit

0

Meine Frage ist dies. Da $ selectedDivs NICHT ein Array ist, wie kann ich jedes dieser divs mit einer for-Schleife anstelle der .each() - Funktion durchlaufen?

Ah aber es ist. Versuchen Sie diesen Code:

int counter = $selectedDivs.length - 1; //zero based so sub one 
for (; counter > 0; counter--){ //note I went for the backwards loop here, your preference 
    var javascriptElement = $selectedDivs[counter]; 
    // I like to play with my javascriptElement in the morning 
    // I like to play with my javascriptElement in the afternoon 
    // I like to play with my javascriptElement in the evening 
} 

Und das tut genau, was Sie gefragt.

+0

Es ist nicht technisch ein Array, aber es hat wie eins, weil Array.prototype.push.apply aufgerufen wird. – jpsimons

2

Ihre Funktion geschrieben werden soll wie folgt statt: „Pythonic“

var i = 0; 
$selectedDivs.each(function() { 
    $el = $(this); 

    if (i % 2 == 0) { 
     $el.addClass('floatLeft'); 
    } 
    else { 
     $el.addClass('floatRight'); 
    } 
    i++; 
}); 
+0

Das funktioniert auch. Allerdings habe ich es lieber mit der for-Schleife-Methode gemacht, wie sie von @SLaks angegeben wird. Vielen Dank für Ihre Hilfe, sehr geschätzt. – Amit

1

Es ist ein Wort, ich suche, in der Python-Welt ist es Ein Wort, das "in Übereinstimmung mit den gängigen Idiomen" bedeutet, aber für jQuery. "jQueryish?"

jQuery("#team > div:even").addClass("floatLeft"); 
jQuery("#team > div:odd").addClass("floatRight"); 
+0

Ich sollte auch beachten, ich bevorzuge immer schreiben "jQuery" im Gegensatz zur Verwendung des Dollarzeichens. Warum? Einige Template-Systeme wie Cheetah verwenden Dollar-Zeichen für die variable Interpolation, Sie werden besser in der Lage sein, mit anderen Bibliotheken wie dem Prototyp gut zu spielen, und, wiederholen sich wiederholte Strings recht gut mit gzip, was die meisten Server ohnehin verwenden. – jpsimons