JQUERY: в каждом цикле найти класс - PullRequest
1 голос
/ 15 февраля 2012

Мне нужно проверять каждый .archive_blocks на наличие .archive_blocks_fa_active.Если это правда, примените css к .archive_blocks_sa.

<div class="archive_blocks">
    <a href="#" class="archive_blocks_fa_active">
        <img width="142" height="142" src="#">
    </a>
    <div class="archive_blocks_name">
        <a href="#" class="archive_blocks_sa">Ilustrations</a>
    </div>
</div>

JQUERY:

 $('.archive_blocks').each(function(){

    if ( $("a.archive_blocks_fa_active").parents(this).length == 1 ) { 
        alert('OK'); 
    } else {        
        alert('NO');    
    }
});

Ответы [ 4 ]

2 голосов
/ 15 февраля 2012

Вы можете использовать метод has(), уменьшающий набор совпадающих элементов до тех, чей потомок соответствует элементу селектора или DOM.

$('.archive_blocks').each(function(){
   if ($(this).has(".archive_blocks_fa_active").length) { 
        $(this).find('.archive_blocks_sa').addClass('className'); 
   } 
});
2 голосов
/ 15 февраля 2012

Если я правильно понял ваш вопрос, разве вы не можете просто сделать это и не беспокоиться о each:

$(".archive_blocks a.archive_blocks_fa_active")
    .closest(".archive_blocks")
    .find(".archive_blocks_sa")
    .addClass("whatever");

Используется селектор потомков, который соответствует любому элементу a.archive_blocks_fa_active, являющемуся потомком элемента .archive_blocks. Затем он находит связанный .archive_blocks_sa (могут быть другие способы сделать это, возможно, используя parent и next, если хотите), а затем добавляет класс.

1 голос
/ 15 февраля 2012
$('.archive_blocks .archive_blocks_fa_active').parent().find('a.archive_blocks_sa').css(...);
0 голосов
/ 16 февраля 2012
$('.archive_blocks').has(".archive_blocks_fa_active")
                    .find('.archive_blocks_sa')
                    .css({...}); 
...