Выбрать Последний Вложенный Элемент
Как выбрать последний has-errors
div ниже?
<section class="form-block">
<div class="form-group has-errors">
ERROR!
</div>
<div class="form-group has-errors">
ERROR!
</div>
<div class="form-group">
stuff
</div>
</section>
Я могу выбрать первый has-errors
, используя:
.form-block .form-group.has-errors:first-child {
background-color: blue;
}
Но last-child
не работает выше. Как выбрать последний экземпляр .form-group.has-errors
?
2 ответа:
С CSS это будет сложно, если нет каких - то особых правил-например, это всегда 2-е из последних. Короче говоря, то, о чем вы просите, похоже на
last-of-class
, которого не существует. Естьlast-of-type
, но это относится только к типу элемента (div
,p
, и т.д.), а не к классам.Следующий лучший вариант-это ванильный JS, чтобы захватить последний элемент с классом
.form-group.has-error
.
const hasErrors = document.querySelectorAll('.form-group.has-errors'); hasErrors[hasErrors.length -1].style.color = 'red';
<section class="form-block"> <div class="form-group has-errors"> ERROR! </div> <div class="form-group has-errors"> ERROR! </div> <div class="form-group"> stuff </div> </section>
Чтобы сделать это полезным для нескольких блоков формы на странице, его можно изменить кому:
const formGroups = Array.from(document.querySelectorAll('.form-block')); formGroups.forEach(function(block) { const hasErrors = block.querySelectorAll('.form-group.has-errors'); hasErrors[hasErrors.length -1].style.color = 'red'; });
Form Block 1 <section class="form-block"> <div class="form-group has-errors"> ERROR! </div> <div class="form-group has-errors"> ERROR! </div> <div class="form-group"> stuff </div> </section> Form Block 2 <section class="form-block"> <div class="form-group has-errors"> ERROR! </div> <div class="form-group has-errors"> ERROR! </div> <div class="form-group"> stuff </div> </section>
Выбор последнего родственного брата, имеющего класс, не достижим с помощью только CSS. У вас есть только:
:last-child
- последний ребенок своего родителя:last-of-type
- последний элемент этого типа в его родителе- не первый :
selector ~ selector
Поскольку у вас есть
.form-group
, я предполагаю, что вы используете Bootstrap, поэтому вы используете jQuery. Это сделает трюк:$('section').each(function(){ $('.has-errors', $(this)).last().css({borderBottom: '1px solid red'}) })