2011-04-04 293 views
0

首先,請原諒我,如果這是一個多餘的問題。我認爲你會同意這是一個難以合理搜索的案例。選擇孩子的父母

我有HTML,看起來像

<li class='signature'> 
    <span class='label'>Signature:</span> 
    <div class='folding'> 
     <span class='data'></span> 
    </div> 
</li> 
<li class='issuer'> 
    <span class='label'>Issuer:</span> 
    <span class='data'></span> 
</li> 

等等等等

我想使用jQuery做一個.addClass只包含類「摺疊」的DIV任何華里,但而不是其他人。我敢肯定,我可以使用巧妙的.each語句來做到這一點,但我有種直覺感覺,必須使用jQuery選擇器來做到這一點。我已經得到儘可能

$('li > .moreclick').addClass("arrowable"); 

但這當然增加了類的跨度,而不是李。

我堅持一個.each? (如果是這樣的話,任何關於這種做法的最好方法的提示都會很好,但不可否認,這是問題的範圍)。

謝謝!

回答

2

如果li總是將成爲絕對的父:

$("div.folding").parent().addClass("new-class") 

否則,這將讓搜索了層次結構,直到它找到一個li

$("div.folding").closest("li").addClass("new-class") 

dioslaska的解決方案更好。儘管如此,請留在這裏作爲參考。

+0

您的解決方案是一個更好的解決方案。 Dioslaska的解決方案將在這裏打破:http://jsfiddle.net/Svqdc/而你的將按預期工作。 – Peeter 2011-04-04 08:49:07

+0

是的,它會中斷,但這不是特定的情況。例如。如果你把另一個div放在一個帶有li祖先的「摺疊」類中,這個解決方案也會爲你添加一個不需要的類。(雖然沒有攻擊的解決方案,但它是完全正確的,我真的不知道哪個選擇器更快) – dioslaska 2011-04-04 09:19:12

+0

啊哈,我看到了兩者之間的區別。非常有用的比較,謝謝@Luke和@dioslaska。我將此作爲解決方案進行檢查,我必須等到html被凍結後才知道我要使用哪一個,但是我很煩惱,我還沒有獲得足夠的業力來解決這兩個問題: ) – mediapathic 2011-04-06 22:27:37

2

請嘗試以下

$('li:has(.folding)').addClass("arrowable"); 

jQuery documentation

+0

你在這裏做了什麼和「$('li')。有」@littlealien下面的建議?有沒有? – mediapathic 2011-04-06 22:33:35

0

例如:

$('.folding').parent().addClass('arrowable'); 

//編輯過慢..

+0

仍然有用。謝謝! – mediapathic 2011-04-06 22:34:27

0

嘗試。

$('li').has('.folding').addClass("arrowable"); 
0

如果你想查詢只有李的直接孩子:

$('li:has(> div.folding)').addClass("arrowable"); 
+0

哦,我不知道你可以用>來做這件事,這很好。謝謝。 – mediapathic 2011-04-06 22:35:23

0

請試試這個:

$("li:has(div.folding)").addClass("new-class") 

這將選擇完全li元件,它的divs父有類'folding'

+0

在比較這與上述dioslaska的解決方案,我沒有意識到你可以用這種方式指定div.folding。很高興知道,謝謝! – mediapathic 2011-04-06 22:31:52