2016-05-11 5 views
0

У меня есть список пунктов:Добавить класс к элементу без идентификатора

<div class="crew-item> 
    <div class="crew-grid"></div> 
    <div class="crew-detail></div> 
</div> 
<div class="crew-item> 
    <div class="crew-grid"></div> 
    <div class="crew-detail></div> 
</div> 
<div class="crew-item> 
    <div class="crew-grid"></div> 
    <div class="crew-detail></div> 
</div> 

Когда я нажимаю на выбранную «экипаж сетку», я хотел бы добавить класс («активным») в его родитель-член экипажа, но я понятия не имею, как добиться этого, используя vanilla js или jQuery. Цель состоит в том, чтобы раскрыть часть «Детали экипажа» с активным классом, добавленным к его родительскому элементу.

ответ

0

Использование JQuery:

$('.crew-grid').click(function() { 
    $(this).closest('.crew-item').addClass('active'); 
}); 
1

Как это ?:

$('.crew-grid').on('click', function() { 
    $(this).closest('.crew-item').addClass('active'); 
}); 

В основном, начиная с щелкнули элемента, получить ближайший предок элемент, который соответствует этому селектору. Вам не нужен id для таргетинга на элемент, это просто способ идентифицировать его на основе информации, имеющейся у вас (в данном случае элемента с щелчком).

Если вы хотите, чтобы дезактивировать другие элементы одновременно:

$('.crew-grid').on('click', function() { 
    $('.crew-item').removeClass('active'); 
    $(this).closest('.crew-item').addClass('active'); 
}); 
+0

спасибо за помощь и объяснения, я был смущен, как предназначаться элемент, теперь я буду знать, отлично работает! –

0

Использование Document.querySelectorAll()

var crews = document.querySelectorAll('.crew-item'); 
 

 
if (crews) { 
 

 
    for (var i = 0; i < crews.length; i++) { 
 
    var grid = crews[i].querySelector('.crew-grid'); 
 

 
    grid.addEventListener('click', toggleActive, false); 
 
    } 
 
} 
 

 
function toggleActive() { 
 
    var grids = document.querySelectorAll('.crew-item'); 
 
    for (var i = 0; i < grids.length; i++) { 
 
    if (grids[i].classList.contains('active')) { 
 
     grids[i].classList.remove('active'); 
 
    } 
 
    } 
 

 
    this.parentNode.classList.add('active'); 
 
}
.crew-item.active { 
 
    background: #DDD; 
 
} 
 
.crew-grid:hover { 
 
    cursor: pointer; 
 
    background: #eee; 
 
}
<div class="crew-item active"> 
 
    <div class="crew-grid">crew-grid</div> 
 
    <div class="crew-detail">crew-detail</div> 
 
</div> 
 
<br> 
 
<div class="crew-item"> 
 
    <div class="crew-grid">crew-grid</div> 
 
    <div class="crew-detail">crew-detail</div> 
 
</div> 
 
<br> 
 
<div class="crew-item"> 
 
    <div class="crew-grid">crew-grid</div> 
 
    <div class="crew-detail">crew-detail</div> 
 
</div>

+0

спасибо за помощь, я смутился, как выбрать элемент. Ваше решение отлично работает и не позволяет мне загружать jQuery –

Смежные вопросы