РЕДАКТИРОВАТЬ: Этот вопрос аналогичен моему, но это не совсем дубликат, потому что я понимаю, как на самом деле работают псевдо-селекторы :first-child
и :first-of-type
. Вопрос не в том, «почему мои селекторы не работают», а в том, «Какой селектор помимо просто простой :first-child
я могу использовать для моих обстоятельств?»Принятый ответ на этот вопрос просто объясняет информацию, которую я уже знаю.
===
В JavaScript, когда вы используете element.querySelector('a')
, он вернет первый тег <a>
, найденный внутриэлемент, независимо от его глубины, и он не будет продолжать поиск других элементов.
В CSS вы можете использовать пробел, такой как .element a
, и он будет применяться к каждому найденному тегу <a>
внутри элемента, независимо от того, насколько глубоко. Это больше похоже на element.querySelectorAll('a')
, если сравнивать его с JavaScript.
Даже .element > a
применяется к каждому тегу <a>
, который является прямым потомком элемента, но все еще не совсем правильным и Я бы предпочел не зависеть от уровня вложенности. .element a:first-child
ближе, но все еще не идеально. Это все еще применяется к нескольким элементам, если ваша структура выглядит следующим образом:
<span class="element">
<span>
<a>Demo</a> <!-- I only want to select this one -->
<a>Demo</a>
</span>
<span>
<a>Demo</a>
<a>Demo</a>
</span>
</span>
В приведенном выше примере вы можете гипотетически использовать .element > span:first-child > a:first-child
, но это становится чрезвычайно жестким и сильно зависитна структуру вложенности, которая в моем случае изменяется в зависимости от места, в котором она появляется в документе. Обычно я настраиваю HTML, чтобы иметь более согласованную и более простую структуру, но у меня нет этой свободы в настоящее время, мне просто нужно работать с тем, что доступно.
Есть ли какая-то магия CSS, которую яможно использовать для выбора только первого совпадения независимо от глубины? Или мне просто нужны дополнительные классы?