0

let elems = document.querySelectorAll('.item')
let c = elems.filter(function(currentValue, index){
    return currentValue.hasAttribute('class')
});

alert(c)

<div class="item red"></div>
<div class="item green"></div>
<div class="item red"></div>
<div class="item blue"></div>
<div class="item red"></div>
insolor
  • 49,104

1 Answers1

2

.querySelectorAll возвращает не массив, а коллекцию. Поэтому у него просто нет этого метода.

Для того, чтобы он появился, нужно получить массив на основе этой коллекции, например используя метод Array.from

let elems = Array.from(document.querySelectorAll('.item'));
let c = elems.filter(function(currentValue, index){
    return currentValue.hasAttribute('class');
 });

console.log(c);

<div class="item red"></div>
<div class="item green"></div>
<div class="item red"></div>
<div class="item blue"></div>
<div class="item red"></div>
Grundy
  • 81,538
  • спасибо! А как делать так, чтобы оно выводило не [обджек], а напремер тег либо класс? – Ростислав Кальченко Apr 29 '22 at 08:40
  • @РостиславКальченко, он и выводит html элемент, просто не надо для отладки использовать alert, который явно преобразовывает свой аргумент в строку. – Grundy Apr 29 '22 at 08:45
  • https://ru.stackoverflow.com/q/1404966/191482 тут юзер завёл ещё один аккаунт. Надо смерджить – Алексей Шиманский Apr 29 '22 at 09:23