#javascript #html #css-selectors
#javascript #HTML #css-селекторы
Вопрос:
Правильный способ присвоить элементу несколько классов — просто поместить пробелы между ними. Правильно?
Тогда почему селектор [class=CLASSNAME]
не работает, если это не единственный класс?
[class^=CLASSNAME]
работает, если класс является первым.
Но как выбрать все элементы, которые обладают данным классом, независимо от количества или порядка их классов?
Я хочу выбрать все элементы с помощью class foo-bar
. Но приведенный ниже код выбирает только первый.
const selector = '[class=foo-bar]';
const divs = document.querySelectorAll(selector);
console.log([...divs].map(div => div.textContent));
<div class="foo-bar">foo</div>
<div class="foo-bar baz">bar</div>
<div class="baz foo-bar">baz</div>
Комментарии:
1. Это селектор атрибутов, а не селектор классов, developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
Ответ №1:
Когда вы используете селектор атрибута, он сопоставляется со всем значением атрибута как обычная строка. Он не обрабатывает class
атрибут специально, поэтому он не считается списком классов, которые можно сопоставлять по отдельности.
Как и в CSS, используйте .classname
для сопоставления любого класса в списке.
const selector = '.foo-bar';
const divs = document.querySelectorAll(selector);
console.log([...divs].map(div => div.textContent.trim()));
<div class="foo-bar">foo</div>
<div class="foo-bar baz">bar</div>
<div class="baz foo-bar">baz</div>