JQuery каждая проблема цикла - PullRequest
3 голосов
/ 02 июня 2010

У меня есть следующий код

  <div>
 <a href="#" class="clickMe">test</a>
 <ul>
     <li class="action_li">1</li>
     <li class="action_li">2</li>
 </ul></div> <div>
 <a href="#" class="clickMe">test</a>
 <ul>
     <li class="action_li">3</li>
     <li class="action_li">4</li>
 </ul>

и я хочу зациклить все <li>, которые заключены в том же <div>, что и нажатый <a>

$("a.clickMe").live("click", function(eve){
   eve.preventDefault();
   $('.action_li').each(function(index) {
      console.debug(this);
   }); 
});

но, конечно, это даст мне все 4 <li>, а не две вложенные поэтому я хочу, чтобы что-то начиналось с $(this) и заканчивалось .each()

Ответы [ 4 ]

5 голосов
/ 02 июня 2010

Есть много способов, примеры:

   $(this).parent().find("li.action_li").each(function(index) {
      console.debug(this);
   }); 

или

   $(this).next("ul").children("li.action_li").each(function(index) {
      console.debug(this);
   });

и т.д.

5 голосов
/ 02 июня 2010

Это должно работать:

$("a.clickMe").live("click", function(eve){
   eve.preventDefault();
   $('.action_li', $(this).parent()).each(function(index) {
      console.debug(this);
   }); 
});

Второй параметр рядом с селектором ограничит поиск только частью дерева DOM, в этой части - одним div, который является родительским для элемента a.

3 голосов
/ 02 июня 2010

Вам нужно получить элемент <ul>, который является родным элементом <a>, а затем получить его дочерние элементы.

Например:

$(this).siblings('ul').children('li.action_li').each(function(index) {
    //...
});

Вы также можете позвонить $(this).next() или $(this).nextAll('ul').

0 голосов
/ 02 июня 2010

Это может сработать:

$(this).parents('div').find('li').each(...
...