Array.some () не является функцией - PullRequest
0 голосов
/ 26 марта 2020

У меня проблема с методом array.some () в JavaScript. У меня есть html -код:

<div class="list">
 <div class="item"></div>
 <div class="item"></div>
 <div class="item selected"></div>
</div>

И я пытаюсь найти один элемент массива, который содержит имя класса "selected".

const items = document.querySelectorAll('.item');

items.some(item => {
 if (item.classList.contains('selected')) { console.log(true); }
 else { console.log(false); }
});

Но все что Я получаю эту ошибку: «Uncaught TypeError: items.some не является функцией» Может кто-нибудь сказать мне, почему метод Array.some () не работает для массива div? Спасибо

Ответы [ 3 ]

1 голос
/ 26 марта 2020

Это происходит потому, что .some() - это метод массива, но items здесь не массив, а набор узлов, более известный как NodeList. Итак, сначала нам нужно преобразовать его в массив, например:

const items = [...document.querySelectorAll('.item')];

Для получения дополнительной информации:

DEMO:

const items = [...document.querySelectorAll('.item')];

items.some(item => {
  if (item.classList.contains('selected')) {
    console.log(true, item);
  } else {
    console.log(false, item);
  }
});
<div class="list">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item selected"></div>
</div>
1 голос
/ 26 марта 2020

document.querySelectorAll возвращает NodeList без применения some метода

Использование Array.from для преобразования NodeList до Array

Вы можете найти другие методы для преобразования NodeList в Array

const items = Array.from(document.querySelectorAll('.item'));

items.some(item => {
 if (item.classList.contains('selected')) { console.log(true); }
 else { console.log(false); }
});
0 голосов
/ 26 марта 2020

Функция querySelectorAll возвращает NodeList , а не массив.

Преобразование его в массив с использованием Array.from(nodelist).

...