Как добавить класс только к верхнему элементу триггера с помощью Jquery?

Я работаю над аккордеонным материалом Jquery. Я хочу добавить класс в div, который содержит тег триггера аккордеона ‹a›. Вы можете посмотреть на мой код. Я хочу добавить «первое» имя класса только к первому классу «newsitems», когда щелкнул заголовок «Мода рецессии в японском видео».

        <!-- 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-->

person Kemal    schedule 11.03.2010    source источник


Ответы (3)


Вы ищете метод closest, который находит самого внутреннего родителя, содержащего элемент.

Например:

$('div.newsItems h3 a').click(function() { 
    $(this).closest('div.newsItems').addClass('first');
});
person SLaks    schedule 11.03.2010

Также мы должны добавить что-то вроде строк ниже, чтобы удалить класс после нажатия другого триггера:

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

Просто для альтернативного ответа.

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

Редактировать: изменен if($(e.target).is("a")){ на IMG, так как SLaks указал, что я пропустил этот тег.

person Mark    schedule 11.03.2010
comment
@SLaks хорошая мысль, но просто измените a на img, и это будет :) - person Mark; 12.03.2010