2015-01-14 27 views
1

在我的應用程序中,我想查找具有類名的單擊元素的最近父級。爲此,我有以下代碼與closest方法。我知道它具有使用選擇器獲得最近元素的功能。但是在這裏,我給了一個類名作爲選擇器,Jquery - 查找最近的擁有類名的父親

$(".selectable").click(function(){ 
    var closest = $(this).closest('.selectable'); 
});  

的問題是,如果當前元素及其母公司具有相同的類.selectable,它返回當前元素本身。但實際上我想要它的父母。例如,

<div class="selectable div-1"> 
    <div class="selectable div-2"> 
     <!--elements here--> 
    </div> 
</div> 

在上述例子中我點擊.div-2 DIV,它返回.div-2本身,而不是.div-1 DIV。請不要問我從父刪除.selectable類,它是功能.. :-)

+2

@Satpal沒必要像說'最近()'包括元素本身 –

回答

2

closest()得到具體類的第一個父:

$(this).parents('.selectable').first(); 
+0

感謝您的回答..Great one ... :) –

2

您需要使用的.parents()代替.closest()

$(this).parents('.selectable'); 
  • .closest()着眼於所有祖先,以及原始元素,並返回第一個匹配項。

  • .parents()看着所有的祖先,並返回所有的匹配。

+0

讓我試試吧... –

+0

缺點是,如果有多於一個家長選擇了'selectable' –

+0

這很難說,除非OP共享DOM。 –

3

然後開始使用的parent()

$(".selectable").click(function(){ 
    var closest = $(this).parent().closest('.selectable'); 
}); 
+0

確實很聰明的確;; –

+0

哦,男人..你真棒...感謝您的巨大幫助... :) –

+0

@SherinJose很高興它幫助:) –

2

您可以使用parents像下面 -

$(".selectable").click(function(){ 
    var closest = $(this).parents('.selectable'); 
}); 
+0

感謝您的回答.... :) –

+0

高興地幫助你:) –

0

還記得return false在你的方法,以避免起泡:

$(".selectable").click(function() { 
 
    // var closest = $(this).parent().closest('.selectable'); 
 
    var selectableParentExist = $(this).parents('.selectable').length; 
 

 
    if (selectableParentExist > 0) { 
 
    var closest = $(this).parents('.selectable'); 
 
    alert(closest.attr("id")); 
 
    } 
 
    return false; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<div id="parentDiv" class="selectable div-1">Parent Div 
 
    <div id="selectableDiv" class="selectable div-2"> 
 
    <!--elements here-->Selectable Div 
 
    </div> 
 
</div>