Я хотел бы выбрать следующие теги. Возможно ли это без изменения структуры HTML
? DIV.first
добавляются динамически, поэтому они могут меняться. Мне нужно .first.bb
каждый последний .first.bb
до .first.a
и последний в #wrapper
который уже сделан.
HTML
<div id="wrapper">
<div class="first">first</div>
<div class="first bb">first second</div>
<div class="first bb">first second</div>
<div class="first bb">first second</div> <!-- <- need to select this -->
<div class="first a">first</div>
<div class="first a">first</div>
<div class="first a">first</div>
<div class="first bb">first second</div>
<div class="first bb">first second</div>
<div class="first bb">first second</div>
<div class="first bb">first second</div> <!-- <- need to select this -->
<div class="first a">first</div>
<div class="first a">first</div>
<div class="first a">first</div>
<div class="first bb">first second</div> <!-- <- need to select this -->
</div>
CSS
.first.bb:last-child {
color:red;
}
.first.bb + .first.a {
color:red;
}
Предыдущий бит селектора sibling может быть выполнен только с помощью JavaScript во время запроса. См. Http://jsfiddle.net/iamnotsam/t4BUW/
// With jQuery
$('.bb + .a').prev().addClass('last-first-bb');
Или с простым JavaScript
// With just JavaScript
var elements = document.querySelectorAll('.bb + .a'),
className = 'last-first-bb';
Array.prototype.forEach.call(elements, function(el, i){
var el = el.previousElementSibling;
if (el.classList)
el.classList.add(className);
else
el.className += ' ' + className;
});
Это делает выбор для сложной части вашего вопроса. Выбор последнего дочернего элемента #wrapper с помощью CSS является тривиальным, поэтому для этого нам не нужны трюки.