如何使用Jquery将类添加到触发器的上层元素?

问题描述:

我正在研究Jquery手风琴的东西。我想向包含手风琴触发器<a>标记的div添加一个类。你可以看看我的代码。当点击“日本时尚流行视频”标题时,我想添加“第一”类名到第一个“newsitems”类。如何使用Jquery将类添加到触发器的上层元素?

 <!-- news items starts--> 
     <div class="newsitems"> 
      <h3 class="business"> <a href="#" title="expand"><img src="images/expand_icon.gif" alt="collapse" class="collpase" /> Recession fashion in Japan Video</a> </h3> 
      <p class="timestamp">0100hrs</p> 
     </div> 
     <!-- news items ends--> 
     <!-- news items starts--> 
     <div class="newsitems"> 
      <h3 class="sports"> <a href="#" title="expand"><img src="images/expand_icon.gif" alt="collapse" class="collpase" /> Murray survives five-set thriller at Wimbledon</a> </h3> 
      <p class="timestamp">0100hrs</p> 
     </div> 
     <!-- news items ends--> 

您正在寻找的closest方法,界河发现含有元素最里面的父。

例如:

$('div.newsItems h3 a').click(function() { 
    $(this).closest('div.newsItems').addClass('first'); 
}); 
+1

'最接近'是一个救星。 – Mark 2010-03-11 22:34:36

+0

是的马克,这也保存了我的:)太阳SLaks – Kemal 2010-03-11 23:10:07

$('div.newsitems h3 a').click(function() { 
    $(this).parent().parent().addClass('first'); 
}); 
+1

如果结构的变化,在所有这将无法正常工作。 – SLaks 2010-03-11 22:27:20

+0

好点,我看到你的帖子是最好的+1。 – 2010-03-11 22:47:08

只是一个备选答案。

$('div.newsItems').click(function(e){ 
    if($(e.target).is("IMG")){ 
     $(this).addClass("first"); 
    } 
} 

编辑:改变了if($(e.target).is("a")){IMG作为SLaks指出,我错过了标记。

+0

这将无法正常工作 - 标签包含另一个标签。 – SLaks 2010-03-11 22:44:21

+0

@SLaks好点,但只是将“a”改为“img”,它会:) – Mark 2010-03-12 15:23:06

此外,我们应该像添加的东西线下方点击另一触发后删除类:

var dropDown = $(this).parent().next().next(); /* This is configured for my script. Yours may be different*/ 
$('div.newsitems').not(dropDown).removeClass('first');