2012-02-15 80 views
0

我需要检查每个.archive_blocks是否包含.archive_blocks_fa_active。 如果它是真的,则将css应用于.archive_blocks_sa。JQUERY:在.each循环中查找类

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

回答

2

假设我理解正确你的问题,你就不能做到这一点,也懒得与each

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

它使用的后裔选择器匹配作为.archive_blocks元素的后代的任何a.archive_blocks_fa_active元素。然后它会找到相关的.archive_blocks_sa(如果您愿意,还可以使用其他方法,例如使用parentnext),然后添加该类。

+0

你好,请仔细阅读所有的问题:) – Vital 2012-02-15 20:00:46

+0

@Vital - 不知道你的意思......我看过的所有的问题!如果我误解了你正在尝试做的事,请解释一下。 – 2012-02-15 20:02:41

+0

感谢您的回答:) – Vital 2012-02-15 20:03:00

1
$('.archive_blocks .archive_blocks_fa_active').parent().find('a.archive_blocks_sa').css(...); 
+0

它的工作:))但你能解释我一点点,它是如何工作的? :D – Vital 2012-02-15 19:59:58

+0

它得到所有.archive_blocks_fa_active类,它们是.archive_blocks类的子类,然后获取每个类的父节点,然后在后代节点中找到.archive_blocks_sa类,然后执行任何你想要的操作;-) – jka6510 2012-02-15 20:06:04

1

可以使用has()方法减少匹配元素到那些具有使选择或DOM元素相匹配的后代。

$('.archive_blocks').each(function(){ 
    if ($(this).has(".archive_blocks_fa_active").length) { 
     $(this).find('.archive_blocks_sa').addClass('className'); 
    } 
}); 
+0

这会将该类添加到所有'.archive_blocks_sa'。我想你的意思是使用'find'或类似的东西。 – 2012-02-15 20:02:17

+0

是的,谢谢你:) – ShankarSangoli 2012-02-15 20:03:20

+0

这也工作:) – Vital 2012-02-15 20:11:16

0
$('.archive_blocks').has(".archive_blocks_fa_active") 
        .find('.archive_blocks_sa') 
        .css({...}); 
+0

工作:) – Vital 2012-02-15 20:12:46