Как выбрать элемент по тексту?
Внутри div есть label с текстом. Надо выбрать этот div . Для этого надо сначала выбрать label . Как это сделать?
Отслеживать
33.1k 2 2 золотых знака 33 33 серебряных знака 61 61 бронзовый знак
задан 9 сен 2018 в 9:20
1,272 1 1 золотой знак 13 13 серебряных знаков 30 30 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Т.к. консорциум не хочет связываться с «числом зверя», то только через JS:
// Если без украшательств, то должно выглядеть так: function fGetParentForLabel(sTxt) < // С помощью XPath, находим в документе тег содержащий заданный текст let result = document.evaluate('//label[contains(., "' + sTxt + '")]', document.documentElement, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); // Если такой элемент найден, тогда. if (result.snapshotLength) < // Собственно, получаем нужный parent-элемент с помощью 'closest()' // (если найдено несколько совпадений, то берём только первое (0-based)) return result.snapshotItem(0).closest('.label-list'); >> // Пример работы XPath window.onload = function() < document.querySelector('.input-text').addEventListener('input', function() < let result = document.evaluate('//label[contains(., "")]', document.documentElement, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (let i = 0; i < result.snapshotLength; i++) < result.snapshotItem(i).style.background = ''; >if (this.value) < // С помощью XPath, находим все содержащие заданный текст let result = document.evaluate('//label[contains(., "' + this.value + '")]', document.documentElement, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); // Если такие элементы найдены, тогда. if (result.snapshotLength) < // Перебираем найденное for (let i = 0; i < result.snapshotLength; i++) < // Подсвечиваем нужный result.snapshotItem(i).style.background = '#f99'; > > > >); console.log(fGetParentForLabel('оже la')); >
.input-text < width: 300px; >.label-list
">
Отслеживать
ответ дан 10 сен 2018 в 10:31
33k 6 6 золотых знаков 29 29 серебряных знаков 71 71 бронзовый знак
А что значит связываться с «числом зверя»?
10 сен 2018 в 11:52
@Andru по ссылке ходили? Номер пункта видели? Вот, то-то и оно .
10 сен 2018 в 11:59
-
Важное на Мете
Связанные
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Селекторы — Основы верстки контента
В прошлых уроках и упражнениях мы использовали достаточно простые селекторы. Они позволяли выбрать элементы, к которым будут применены CSS правила. Вы уже умеете выбирать элемент по его тегу, классу, идентификатору и найти вложенный элемент.
CSS дает намного большие возможности по выбору элементов. В этом уроке мы изучим самые популярные селекторы второго и третьего уровня спецификации W3C. В конце урока будут оставлены ссылки на спецификации, в которых вы сможете узнать и о других селекторах.
Выбор соседнего элемента
Ранее использование селекторов указывало, какой конкретно элемент мы хотим выбрать и где он находится относительно своих родительских блоков. В большинстве случаев этого достаточно для точного указания элемента, но бывают случаи, когда нужно выбрать соседний элемент, а не вложенный. Например,
class="time">. class="timer">.
По условию нашей задачи элемент timer полностью зависит от блока time . Предположим, что стиль таймера меняется в зависимости от наличия элемента с классом time . Есть несколько путей решения такой задачи:
- Положить оба элемента в единого родителя и дать им уникальные классы для разных ситуаций.
- Воспользоваться селектором соседнего элемента.
Чаще всего, именно первый вариант будет предпочтительным. При этом вы не раз столкнетесь с ситуациями, когда это невозможно. Такое может происходить при динамическом добавлении элементов на страницу. И тут на помощь приходят селекторы.
В CSS существует два селектора для выбора элемента, который лежит рядом с другим элементом:
- A + B — выбор элемента B, который находится непосредственно после элемента A. Такой селектор называется смежным или соседним
- A ~ B — выбор элемента B, который находится на том же уровне вложенности, что и A. При этом они имеют общего родителя и все элементы B находятся после элемента A в HTML. Такой селектор называется родственным.
Для примера выше отлично подойдет смежный селектор. Элементы time и timer идут друг за другом и являются дочерними элементами одного и того же родителя. Стилизуем элемент timer в зависимости от существования элемента time :
Родственный селектор позволяет немного усложнить ситуацию. Ведь теперь будет возможность не просто выбрать соседний элемент, а элемент, лежащий на том же уровне. Изменим пример, который позволит наглядно продемонстрировать возможность родственного селектора.
. class="time">. . class="timer">.
Схематически CSS будет выглядеть следующим образом:
.time ~ .timer /* Стили элемента */ >
Селекторы по атрибуту
Атрибуты — неизменная часть работы верстальщика и фронтенд-разработчика. Они не всегда несут в себе семантический смысл как, например, атрибуты alt , title , class , id и так далее.
HTML позволяет добавлять любые пользовательские атрибуты и работать с ними. Пользовательскими считаются такие атрибуты, которые мы определяем сами. Их не существует в документациях, спецификациях. Они нужны для разработчиков, чтобы удобнее обращаться к элементам или отделять похожие элементы. Целей может быть много и, с приобретением опыта, особенно при работе с языком JavaScript, вы заметите, что пользовательские атрибуты используются не так редко, как может показаться с самого начала.
Для стилизации таких элементов в CSS существуют специальные селекторы.
Самый простой селектор по атрибуту просто выбирает элемент по его атрибуту. В CSS атрибут записывается внутри квадратных скобок, это и будет самым простым селектором по атрибуту. Для демонстрации создадим свой атрибут data-full-screen — это будет пользовательский атрибут и вы его не найдете в документациях. Для тренировки можете его назвать совершенно другим образом — смысл действий от этого не изменится:
data-full-screen>
section[data-full-screen] width: 100vw; height: 100vh; background: #2196f3; >
Можно выбирать не только по названию атрибута, но и по его значению. В этом случае рядом с именем атрибута указывается его значение в следующем синтаксисе:
data-full-screen="true">
section[data-full-screen="true"] width: 100vw; height: 100vh; background: #2196f3; >
С опытом вы заметите, что многие JavaScript-библиотеки работают именно с пользовательскими атрибутами. Это позволяет добиться изолированности компонентов и их удобного переиспользования.
Бывают ситуации, когда в HTML есть группа элементов с одинаковыми именами атрибутов, но с разными значениями. Причем некоторые из них могут быть похожи друг на друга, составляя части одного компонента. Например,
data-nm-section="catalog"> data-nm-section="catalog-popular"> data-nm-section="catalog-new">
Все три секции, по своей логике, будут иметь похожее оформление. Можно добавить всем одинаковый класс, но существует одна проблема: если элементы добавляются динамически, с помощью JS, то есть вероятность существования такого же класса внутри проекта. Это приведет к коллизии, когда один селектор перебьет свойства другого. Поэтому и используются атрибуты.
Все три секции имеют одинаковую приставку catalog. Это поможет отделить их от остальных названий секций с помощью конструкции [data-nm-section^=»catalog»] . Такой селектор выберет все элементы с атрибутом data-nm-section , значение которого начинается с catalog .
[data-nm-section^="catalog"] width: 50px; height: 50px; margin-bottom: 10px; background: #2196f3; >
Есть еще несколько похожих конструкций, которые ищут «вхождение» подстроки в строку:
- [data-nm-section$=»catalog»] — вхождение подстроки в конце значения атрибута.
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
30 CSS селекторов, которые вы должны знать
Приветствую, друзья, сегодня я покажу 30 CSS селекторов, которые должен знать каждый верстальщик и веб-разработчик. Не важно, если вы только ознакомились с основными CSS селекторами в виде классов и id, или вы уже некоторые время работаете, эта статья поможет всем. Новичкам она поможет разобраться в вопросе лучше. Опытным же разработчикам поможет оптимизировать код, и ускорить процесс верстки в будущем.
Как всегда, я уже подготовил видео к этой статье, советую посмотреть его. В видео я подробнее рассказываю о 30 CSS селекторах. Так же в видео я покажу на примерах как работает тот или иной селектор. Эту же статью я рекомендую использовать больше как шпаргалку к видео и последующей работы. Давайте начинать!
Видео о 30 CSS селекторах, которые вы должны знать
Разбираем необычные CSS селекторы с примерами.
CSS селектор *
Данный селектор выбирает все элементы на странице. Часто его используют в самом начале документа для указания свойства box-sizing: border box для всех элементов. Но вы можете указывать любые свойства. Я в примере ниже указал цвет текста. Он применится для всех элементов на странице.
Так же данный селектор можно применят для стилизации всех дочерних элементов конкретного элемента. В примере ниже я задаю зеленый цвет для всех элементов внутри .block.
.block *
CSS селектор # / #element
Скорее всего вы уже знакомы с селектором id. Это один из самых базовых селекторов. Однако, я советую избегать использования данного селектора для стилизации. ID селектор более функционален для использования из JavaScript. В CSS же он только вносит дополнительную сложность, если вы все элементы стилизуете через классы, а некоторые через id. Так же особенность id это то, что id должен быть уникален, и с помощью него можно выбрать только 1 элемент на странице.
#block
CSS селектор . / .element
Это так же базовый и самый часто используемый селектор. В отличие от id он не должен быть уникален и может использоваться для выбора нескольких элементов на странице. С помощью него стилизуют почти все элементы на странице.
.element
CSS селектор element element (контекстный)
С помощью данного селектора можно выбрать элементы, которые соответствуют заданному контексту. Здесь вы можете передавать другие селекторы, например, классы, ID или название тегов. Давайте рассмотрим такие примеры:
// Тут мы зададим цвет элементу с классом title, который находится внутри элемента с классом container .container .title < color: red; >// Тут мы зададим цвет все ссылкам, которые находится внутри элемента в id wrapper #wrapper a < color: red; >// Тут мы зададим цвет всем параграфам, которые находятся в div div p
Так же мы можем задавать свойства по условию. Например, сменить цвет элементу, если он имеет указанный класс.
// Если div имеет класс active, меняем ему цвет div.active < color: red; >// Если элемент с классом menu, имеет класс active, меняем для него margin .menu.active
CSS селектор element (селектор по типу)
Данный селектор помогает выбрать все элементы с указанным типом на странице. Например, мы можем выбрать все ссылки или списки.
// Выберем все ссылки и уберем для них подчеркивание a < text-decoration: none; >// Выберем все несортированные списки и зададим им margin ul
CSS селектор a:visited и a:link
С помощью css селектора a:link мы можем выбрать все ссылки, на которые пользователь еще не нажал. С помощью же селектора a:visited мы сможем выбрать те ссылки, по которым пользователь уже переходил. Так же вы можете комбинировать селекторы между собой. Например, стилизовать ссылки с заданным классом, по которых пользователь уже переходил.
// Красим ссылки, по которым пользователь уже переходил a:visited < color: grey; >// Красим ссылки, по которым пользователь пока не переходил a:link < color: red; >// Красим ссылки, которые имеют класс active, и по которым пользователь уже переходил a.active:visited
CSS селектор + / element + element
Позволяет выбрать элемент, который идет сразу же после указанного элемента.
.block + p < color: red; // Красим первый параграф, который идет после элемента с классом block >
CSS селектор > / element > element
Позволяет выбрать только тот элемент, который является прямым потомком указанного элемента. Давайте рассмотрим такой код с комментариями.
.block > ul
-
// Сработает для этого элемента
- List item
- List item
- List item
- List item
-
// Не сработает для этого элемента, так как он не прямой потомок
- List item
CSS селектор ~ / element~ element
Данный селектор похож на селектор +. Только в отличие от него, он выберет не первый элемент после указанного, а все указанны элементы, расположенные на том же уровне вложенности.
.block ~ p < color: red; // Красим все параграфы, которые расположены сразу за элементом с классом block >
CSS селектор [attribute] / element[attribute]
Это селектор атрибутов. Он выберет все элементы, у которых присутствует указанный атрибут.
a[title] < color: green; // Красим те ссылки, у которых задан атрибут title >
CSS селектор [attribule=»value»] / element[attribule=»value»]
Данный селектор выбирает те элементы, у которых указан заданный атрибут с заданным значением. Особенностью данного селектора является его строгость. Если ссылка будет хоть немного отличатся, например будет указанно http://google.com или google.com, то селектор не сработает.
a[href="https://google.com"] < color: red; // Красит те ссылки, которые ссылаются на https://google.com >a[title="house"] < color: green; // Красит те ссылки, у которых атрибут title равен house >img[src="https://webdevtips.pro/css/30-must-know-css-selectors/house.jpg"] < width: 200px; // Делаем для картинки, которая показывает house.jpg, ширину в 200 пикселей >
CSS селектор [attribute*=»value»] / element[attribute*=»value»]
Данный селектор очень похож на предыдущий, однако он является более гибким. Здесь мы указываем то значение, которое должно быть хотя бы частью искомого атрибута. Однако важно помнить, что он слишком обширен. Например, код ниже так же выберет домен, например, ex-google.com, так как в нем есть наша искомая часть.
a[href="google.com"]
CSS селектор [attribute^=»value»] / element[attribute^=»value»]
Данный селектор ищет элементы, у которых начало значения атрибутов соответствую заданному началу строки.
a[href^="http"] < color: red; // Красит все ссылки, которые начинаются на http >
CSS селектор [attribute$=»value»] / element[attribute$=»value»]
Данный атрибут очень сильно похож на предыдущий, однако он ищет не по началу строки, а по концу.
img[src$=".jpg"] < width: 300px; // Для всех картинок, с расширением .jpg задаем ширину в 300 пикселей. >
CSS селектор [data-*=»value»] / element[data-*=»value»]
Данный селектор помогает выбрать элементы в зависимости от значения data атрибута. Давайте в примере ниже выберем все ссылки, которые ведут на внешний источник.
a[data-origin="external"] < color: blue; // Красим все ссылки, у которых значение data атрибута равно указанному >
CSS селектор [data-~=»value»] / element[data-~=»value»]
Данный селектор похож на предыдущий, но добавляет некоторую гибкость. С помощью него мы можем выбрать атрибут, у которого есть значения, разделенные пробелом. Теперь давайте выберем ссылки на внешнее изображение.
Теперь мы можем выбрать данную ссылку двумя способами.
a[data-origin="external"] < color: red; >a[data-origin="image"]
CSS селектор :checked / element:checked
Как видно из названия, данный селектор выбирает только отмеченные/выбранные чекбоксы и радио кнопки. В примере ниже мы объединим несколько уже пройденных селекторов. Мы будем красить label, в зависимости от состояния чекбокса.
Нажми на меня
.checkbox:checked + label < color: red; // Если чекбокс активен, то красим label, который идет за ним >
CSS селекторы ::before и ::after
Тут мы получаем псевдоклассы определенного элемента. Они позволяют нам добавить контент вокруг данного элемента. В примере ниже мы добавим красную точку после элемента с классом block.
.block < position: relative; >.block::after
CSS селектор :hover / element:hover
Тоже очень часто используемый селектор. Позволяет присваивать стили при наведении на элемент.
.block:hover < color: red; // Красим цвет текста элемента при наведении >
CSS селектор :not(selector) / element:not(selector)
Псевдокласс отрицания может быть очень полезен, если вам нужно выбрать все элементы кроме тех, которые соответствую указанному условию.
div:not(.block) < color: red; // Красим все div, кроме того, что имеет класс block >
CSS селектор ::pseudoElement / element::pseudoElement
Мы можем использовать данный селектор для стилизации определенной части элемента. Ниже я приведу более детальное описание с примерами, так как их есть несколько.
Как выбирать первую строчку параграфа
p::first-line < color: red; // Красим первую строчку параграфов >
Как выбрать первую букву параграфа
p::first-letter < color: red; // Красим первую букву параграфов >
CSS селектор :nth-child(n) / element:nth-child(n)
Помогает выбрать элемент в зависимости от его позиции на данном уровне вложенности.
.block a:nth-child(2) < color: red; // Красим вторую ссылку внутри блока >.block a:nth-child(6) < color: red; // Красим шестую ссылку внутри блока >
CSS селектор :nth-last-child(n) / element:nth-last-child(n)
Позволяет выбрать определенный элемент с конца.
.block a:nth-last-child(1) < color: red; // Красим последнюю ссылку внутри блока >.block a:nth-last-child(3) < color: red; // Красим третью ссылку с конца внутри блока >
CSS селектор :nth-of-type(n) / element:nth-of-type(n )
Очень похож на селектор :nth-child, однако он работает не для всех дочерних элементов, а только для тех, которые соответствуют типу. Важной особенностью является то, что считает он так же только элементы с нужным типом.
.block a:nth-of-type(2) < color: red; // Красит вторую ссылку на данном уровне вложенности >
CSS селектор :nth-last-of-type(n) / element:nth-last-of-type(n)
Работает как селектор выше, но начинает считать с конца.
.block a:nth-last-of-type(2) < color: red; // Красит вторую ссылку с конца на данном уровне вложенности >
CSS селектор :first-child / element:first-child
Этот псевдокласс выбирает первый дочерний элемент.
.block a:first-child < color: red; // Красим превую ссылку внутри блока >
CSS селектор :last-child / element:last-child
Этот псевдокласс выбирает последний дочерний элемент.
block a:last-child < color: red; // Красим последнюю ссылку внутри блока >
CSS селектор :only-child / element:only-child
Откровенно говоря, вы вря дли будете хоть сколько-нибудь часто использовать данный селектор. Он позволяет выбрать элемент, если он единственный дочерний элемент другого элемента.
.block p:only-child < color: red; // Красит параграф, если он единственный дочерний элемент блока >
CSS селектор :only-of-type / element:only-of-type
Позволяет выбрать элемент, если он единственный элемент заданного типа у родителя.
.block a:only-of-type < color: red; // Красим ссылку, если она единственная в блоке >
CSS селектор :first-of-type / element:first-of-type
Выбирает первый элемент указанного типа. Нумерация начинается только с нужного типа элемента.
.block a:fist-of-type < color: red; // Выбирает первую ссылку внутри блока >
Спасибо, что прочитали! Если у вас остались вопросы, задавайте их в комментариях на YouTube или в нашем Telegram чате.
Так же советую ознакомиться с другими моими статьями:
- Стилизация checkbox. Кастомные чекбоксы
- Эффект наклона карточки для сайта (Tilt.js)
Семенюк Назарий
Full Stack разработчик, Frontend: Vue.js (2,3) + VueX + Vue Router, Backend: Node.js + Express.js. Раньше работал с РНР, WordPress, написал несколько проектов на Laravel. Люблю помогать людям изучать что-то новое)
Комбинаторы
Наконец мы рассмотрим селекторы, которые называются комбинаторами, поскольку они соединяют другие селекторы, создавая полезную связь селекторов друг с другом и расположением содержимого в документе.
| Необходимые условия: | Базовая компьютерная грамотность, установленное базовое программное обеспечение, базовые знания о работе с файлами, основы HTML (изучите Введение в HTML) и понимание работы CSS (изучите Введение в CSS.) |
|---|---|
| Цель: | Узнать о различных комбинаторных селекторах, которые могут быть использованы в CSS. |
Комбинатор потомка
Селектор потомка — обычно представляется символом пробела (» «) — соединяет два селектора так, что элементы, соответствующие второму селектору, выбираются, если они имеют предка (родителя, родителя родителя, родителя родителя родителя и т.д.), соответствующего первому селектору. Селекторы, которые используют комбинатор потомка, называются селекторами потомка.
