0

CSS: Невозможность использования селектора "сосед" (sibling selector)

38

Проблема с CSS-селектором для выбора элементов без определенных соседей

Я работаю с таким HTML-кодом:

<div>
    <div class="iwant" />
    <div class="idontwant" />
</div>
<div>
    <div class="iwant" />
</div>

Мне нужно создать селектор, который выберет все элементы с классом iwant, у которых НЕТ соседей с классом idontwant.

Поскольку я занимаюсь парсингом контента и не могу изменять HTML, ищу решение, которое будет работать в текущей структуре. Какой подход или селектор я могу использовать для достижения этой цели?

4 ответ(ов)

0

К сожалению, в CSS нет селектора-соседа, который мог бы соответствовать элементам (или не соответствовать) по классу.

Ближайший селектор, который мне приходит в голову, - это

.iwant:only-child

Тем не менее, этот селектор подразумевает, что под родительским элементом div не может быть других дочерних элементов, кроме div class="iwant", независимо от их типа или класса. Это может подойти в зависимости от структуры вашего HTML, так что стоит попробовать. Если же проблема заключается в именах классов, то, к сожалению, здесь не осталось много решений, так как в CSS нет псевдокласса :only-of-class, который бы фильтровал по классу и игнорировал остальные.

0

На данный момент в CSS нет селектора для отрицательных сиблингов. Вместо этого можно использовать селектор сиблингов, чтобы задать новые стили для одного элемента, а затем сбросить стили для другого элемента с помощью класса .idontwant.

Пример кода:

div.iwant {
    /* Задаем стили здесь */
    display: inline;
}
div.iwant ~ div.idontwant {
    /* Сбрасываем стили */
    display: block; /* Значение по умолчанию для DIV — block */
}

Таким образом, мы применяем стили к элементам с классом iwant, а для элементов с классом idontwant, которые следуют за ними, сбрасываем эти стили к значению по умолчанию.

0

На StackOverflow можно ответить так:

К сожалению, нет хорошего способа выбрать элемент без конкретного соседнего элемента. Однако вы можете использовать селектор .iwant:last-child, чтобы выбрать элементы, у которых нет последующего соседнего элемента.

Вот пример: http://codepen.io/martinkrulltott/pen/YyGgde.

0

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

div:last-child:not(.idontwant) {

}

Таким образом, этот селектор выберет последний элемент div, который не имеет класса idontwant.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь