2012-04-30 61 views
0

目前,我有以下標記:應用所有子類的父元素

<div class="foo"> 
    <ul class="bar"> 
    <li class="a"></li> 
    <li class="b"></li> 
    </ul> 
</div> 

<div class="foo"> 
    <ul class="bar"> 
    <li class="c"></li> 
    <li class="d"></li> 
    </ul> 
</div> 

,我需要和了下面,通過讓各階層形成的孩子裏,並把它們應用到只有特定的。富:

<div class="foo a b"> 
    <ul class="bar"> 
    <li class="a"></li> 
    <li class="b"></li> 
    </ul> 
</div> 

<div class="foo c d"> 
    <ul class="bar"> 
    <li class="c"></li> 
    <li class="d"></li> 
    </ul> 
</div> 

到目前爲止,我有以下,但它只能在獲得第一類裏的階段是,它適用於相對於每個特定所有包含.foo的div。

$(".foo").addClass($('.bar li').attr('class')); 

任何指向正確方向的指針都非常受歡迎。

+1

我可能會問你爲什麼要動態地做到這一點,而不是僅僅改變你原來的CSS? – Blazemonger

回答

3

您需要迭代.foo元素,然後獲取類他們各自的後代的:

$('.foo').each(function() { 
    $(this).addClass($(this).find('.bar li').map(function() { 
     return this.className; 
    }).get().join(' ')); 
}); 

參考eachmapget

的其他,雖然較慢的方法,因爲.foo查找,將是:

$('.bar li').each(function() { 
    $(this).closest('.foo').addClass(this.className); 
}); 

參考closest

+0

太棒了,謝謝。我剛剛進入迭代部分,並且四處摸索,並且完美地表達了它。 –

+0

不客氣:) –

0

下面是一些代碼,做你需要做什麼:

$('.foo').each(function(i, elem) { 
    get_child_classes(this,elem); 
}); 

//the function you need 
function get_child_classes (parent,current){ 
    $(current).each(function(i, elem) { 
     $(elem).children().each(function(j, elem1){ 
      $(parent).addClass($(elem1).attr('class')); 
      get_child_classes (parent, elem1); 
     }); 
    }); 
} 

在這裏看到小提琴:http://jsfiddle.net/Zpx8R/ 此代碼應爲所有單元工作,不管它是什麼類型的HTML元素。

0
$('.foo').addClass(function() { 
    var cls = ''; 
    $('li', this).each(function() { 
     cls += this.className.concat(' '); 
    }); 
    return cls; 
    }); 

DEMO

相關問題