2011-11-22 48 views
2

我有一種情況需要對當前DIV父元素的下一個DIV進行引用,但匹配特定的類名稱。使用jQuery遞歸獲取由類過濾器匹配的元素的第一個父元素

<div class="container"> 
    <div class="something">test</div> 
    <div class="something">test</div> 
    <div class="something" onclick="$(use jquery to find parent with class container)">test</div> 
</div> 

這將是很容易的,但它也可以是這樣的:

<div class="container"> 
    <div class="someotherthing"> 
     <div class="something">test</div> 
     <div class="something">test</div> 
     <div class="something" onclick="$(use jquery to find parent with class container)">test</div> 
    </div> 
</div> 

這意味着我要尋找的是遞歸地走了DOM的解決方案,直到找到的父給定匹配某個CSS類的元素。

我想知道jQuery是否可以在一次性調用中做到這一點。

+0

你要求的是更好地描述爲祖先而不是父母。父母通常意味着直系祖先。 – R0MANARMY

回答

10

.closest()方法應該處理這個問題:

$(this).closest(".someclass") 
+0

這就是我一直在尋找的。在我看來,我沒有注意到在檢查文檔時感到羞恥。謝謝大家! – SquareCat

0
$('.something').parents('.container'); 

這會做你想做的。

您應該查看有關traversing the DOM的文檔。

0

您可以使用.parents([selector])選擇任何元件的理想父:

$('.something').on('click', function() { 
    var $parent = $(this).parents('.container:first'); 
}); 

這將選擇具有container類的第一個父元素當單擊something類的任何元素時。

請注意,.on().bind()函數的首選jQuery 1.7版本。

文檔爲.parents()http://api.jquery.com/parents

+0

'.bind()'不折舊。 –

+0

參考上面的評論,https://forum.jquery.com/topic/delegate-vs-on#14737000002878044和文檔。 –

+0

@KevinB我用錯誤的措辭,這是「首選」方法:'...我們建議您使用.on()爲任何新的jQuery項目,你知道1.7或更高版本正在使用中。答覆更新,謝謝指出。 – Jasper

2

看看jQuery的closest方法,得到了選擇匹配,在當前元素開始,通過DOM樹前進了第一個元素。

+0

感謝您的解釋。最近的會返回第一個父母,而父母()會返回所有匹配的父母。 – Ben

0
$('.something').parents('.container'); 
相關問題