2011-01-07 9 views
1

У меня есть набор дивы в следующей структуре:Looping над DIVs с помощью 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> 

Я хочу использовать JQuery для перебора каждого DIV и добавить класс floatLeft (если это даже дела) и floatRight (если это нечетно). Я пытался сделать это с помощью следующего кода, но он добавил floatLeft и floatRight всем дивы ...

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'); 
      } 
     } 
    }); 

Я предполагаю, что это из-за функции .each() ... Мой вопрос заключается в следующем. Поскольку $ selectedDivs не является массивом, как я могу перебирать каждый из этих div с помощью цикла for вместо функции .each()? Я намеренно хочу использовать его таким образом, а не .dd() и jQuery. Нечетные возможности ...

Спасибо! Amit

+0

Я предполагаю, что здесь, но я думаю, что вы не должны использовать «#team> DIV», а «#team DIV» без> – JCOC611

ответ

2

Вы должны использовать цикл for или each, но не тот и другой.

В петле for вы можете написать $selectedDivs.eq(i).addClass.

+0

Да, это сделал. Большое спасибо. Мне было интересно, как интегрировать i-й элемент в цикл for, теперь я помню часть eq (i). замечательно. – Amit

0

Мой вопрос в том, что. Поскольку $ selectedDivs не является массивом, как я могу перебирать каждый из этих div с помощью цикла for вместо функции .each()?

Ах, но это так. Попробуйте этот код:

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 
} 

И что делает точно то, что вы просили.

+0

Это не технически массив, но он имеет как один из-за того, что на него вызывается Array.prototype.push.apply. – jpsimons

2

Ваша функция должна быть записана следующим образом, вместо: «Pythonic»

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

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

Это также работает. Однако я предпочел сделать это, используя метод for loop, который задает @SLaks. Спасибо за вашу помощь, хотя, очень ценю. – Amit

1

Там это слово я ищу, в мире Python это Слово, которое означает «в соответствии с общими идиомами», но для jQuery. "JQueryish?"

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

Следует также отметить, что я всегда предпочитаю писать «jQuery», а не использовать знак доллара. Зачем? Некоторые системы шаблонов, такие как Cheetah, используют знак доллара для переменной интерполяции, вы сможете лучше играть с другими библиотеками, такими как прототип, и, черт возьми, повторяющиеся строки очень хорошо сжимаются с gzip, которые в любом случае используют большинство серверов. – jpsimons

Смежные вопросы