2012-04-22 60 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') 
})