<section class="section-one"></section>
<section class="section-two"></section>
<nav></nav>
<section class="section-three"></section>
<section class="section-four"></section>

Поскольку порядок разделов поступает из CMS, порядок разделов неизвестен (т. Е. section-two и section-three можно поменять местами). Я хочу выбрать первый одноуровневый раздел после section-two, но не могу использовать соседние одноуровневые селекторы, так как между разделами потенциально есть другие элементы.

Как я могу выбрать первый раздел после section-two, учитывая, что между ними может быть один или несколько элементов?

0
q. wellington 8 Сен 2016 в 20:18

4 ответа

Лучший ответ
.section-two ~ section {
  /* Set styles */
}
.section-two ~ section ~ section {
  /* Undo styles */
}
.section-two ~ section {
  background: #0f0;
}
.section-two ~ section ~ section {
  background: transparent;
}
<section class="section-one">One</section>
<section class="section-two">Two</section>
<nav>Nav</nav>
<section class="section-three">Three</section>
<section class="section-four">Four</section>
0
Oriol 8 Сен 2016 в 17:35

Вы можете использовать [class^="section-"], поэтому выберите любой класс, который начинается с ".section-", а я использовал nth-last-of-type(2), чтобы отсчитать 2 от конца и выбрать правильный элемент, но без nth-last-of-type(2) вы получите все .section-NUMBER после .section-два

section {
  display: inline-block;
  margin: 5px;
  width: 50px;
  height: 50px;
  background-color: gray;  
}
nav {
  display: inline-block;
  width: 100%;
  height: 10px;
  background-color: gray;
}
.section-two ~ [class^="section-"]:nth-last-of-type(2) {
  background-color: blue;
}
<section class="section-one"></section>
<section class="section-two"></section>
<nav></nav>
<section class="section-three"></section>
<section class="section-four"></section>
0
Mehrad 8 Сен 2016 в 17:47

Я не знаю, можно ли добиться этого только с помощью css-селекторов, они немного ограничены с точки зрения обхода dom.

В качестве примера вы можете использовать обход jQuery, чтобы:

$('.section-two').nextAll('section').first()

Будет выбран первый раздел после .section-two, отметьте это

Надеюсь, это поможет. Ура!

РЕДАКТИРОВАТЬ: Хорошо, похоже, вы можете выбрать удаленного брата, установив стиль, а затем отменив его, как предлагает @Oriol. Я сохраню этот ответ в качестве справки о том, как решить эту проблему с помощью jquery, для использования в будущем.

$('.section-two').nextAll('section').first().css('color', 'red')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<section class="section-one">1</section>
<section class="section-two">2</section>
<nav></nav>
<section class="section-three">3</section>
<section class="section-four">4</section>
0
Lucas Lazaro 8 Сен 2016 в 17:47

Если вы используете jquery $ (".section-two ~ section") .css (/ * делать что угодно * /);

0
Mahesh Kumar Ronde 8 Сен 2016 в 17:27