Ваша попытка довольно близка к работе. Проблема в том, что вы помещаете массив в getClasses
, а не в отдельные классы, и ни у строк, ни у массивов нет стандартного метода contains
(есть includes
, что, вероятно, и имеет в виду),Кроме того, если вам нужны только те, которые содержат -
, вы можете отфильтровать их раньше:
let classesWithDash = new Set();
document.querySelectorAll('*').forEach(element => {
for (const cls of element.className.split(' ').filter(name => name.includes("-"))) {
classesWithDash.add(cls);
}
});
// Now, `classesWithDash` is a set containing the class names with dashes
// If you want an array:
classesWithDash = [...classesWithDash];
Live Пример:
let classesWithDash = new Set();
document.querySelectorAll('*').forEach(element => {
for (const cls of element.className.split(' ').filter(name => name.includes("-"))) {
classesWithDash.add(cls);
}
});
// Now, `classesWithDash` is a set containing the class names with dashes
// If you want an array:
classesWithDash = [...classesWithDash];
console.log(classesWithDash);
<div class="foo foo-bar"></div>
<div class="another-one"></div>
<div class="nodash"></div>
(я никогда не понимал, почему Set
не имеет метода addAll
, или по крайней мере принимает несколько значений дляadd
как push
делает ...)