2012-04-22 59 views
0
<ul id="containerA" class="container"> 
     <li> 
     <span class="sportsType" id="football">Football</span> 
      <ul> 
       <li class="sportsMatch"> 
       <img src="/static/img/arrow_left.png" class="subArrow"/>A vs B <img src="/static/img/arrow_left.png" class="star"/> 
       </li> 

當你點擊帶星級的PNG時,我想返回最上面的ul(containerA)。我可以用.parent.parent.parent等,但它也需要與另一組列出的這心不是很複雜的工作:JQUERY,找到衣櫥ID?

<ul id="containerB" class="container"> 
<li class="sportsMatch"> 
<img src="/static/img/arrow_left.png" class="subArrow"/>A vs B <img src="/static/img/arrow_left.png" class="star"/> 
</li> 

這裏是我的JScript,我有什麼可以把它拿到的標識衣櫃容器?

$(".star").click(function() {} 

回答

4

你會想用.closest找到點擊的元素(this事件處理程序的內部)的最接近anscestor。如果你想在容器的id,您可以使用attrprop,或直接訪問DOM元素和訪問id屬性(如@ sg3s在他的評論中指出):

$(".star").click(function() { 
    var $container = $(this).closest(".container"), 
     containerId = $container.attr("id"); 
}); 

例子:http://jsfiddle.net/L7JyY/

+0

爲什麼不$容器[0] .ID:選擇匹配? – sg3s 2012-04-22 15:18:53

+0

當然,那也可以。 – 2012-04-22 15:19:34

+0

沒有jQuery的開銷。僅僅因爲它在頁面上並不意味着你不得不爲每一件小事而濫用它。我不確定最近是否需要[0],儘管如此。 – sg3s 2012-04-22 15:21:27

0

既然你問的是最頂層,那麼它的傷口就像可能有超過一個對象在在ancesotor hiearchy。如果是這樣的話,那麼你可以這樣做:

$(".star").click(function() { 
    var topContainer = $(this).parents(".container").last(); 
} 

如果你想與class="container"的最近的祖先(如不是最頂層的,但一個是最接近點擊的對象)或有隻有永遠將是一個祖先class="container",那麼你可以這樣做是稍微簡單:

$(".star").click(function() { 
    var container = $(this).closest(".container"); 
} 
1

使用closest method來獲取元素,然後使用attr方法來獲取ID:

var ul = $(this).closest('.container'); 
var id = ul.attr('id'); 
0

如果UL始終有一類「容器」,如果有與同一類別中沒有其他元素的PNG之間,你可以做到這一點

$(".star").click(function() { 
    $(this).closest('.container') 
})