Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Поместить dom элементы в массив после цикла (https://javascript.ru/forum/dom-window/74366-pomestit-dom-ehlementy-v-massiv-posle-cikla.html)

s24344 04.07.2018 08:40

Поместить dom элементы в массив после цикла
 
Ребята, подскажите, как решить следующую задачу:

У меня есть набор dom элементов, которые я получил выборкой:
let images = document.querySelectorAll('.elem)

затем через цикл и условие я отфильтровал лишь нужные мне элементы (в данном случае я вывел те элементы, у которых нет атрибута id):
for (let i = 0; i < images.length; i++) {
  if (images[i].getAttribute('id')) {
    continue
  }

  let pic = images[i]

  console.log(pic)
}

В итоге я получил следующий набор элементов:
<div class="elem">
	<p>1</p>
</div>
<div class="elem">
	<p>2</p>
</div>
<div class="elem">
	<p>3</p>
</div>
<div class="elem">
	<p>1</p>
</div>
<div class="elem">
	<p>2</p>
</div>
<div class="elem">
	<p>3</p>
</div>

Теперь, собственно, вопрос:
Я хочу снова пройтись циклом по этим элементам, но так как это не массив, то:
images[i].length

вернет:
undefined

Как же мне верно реализовать следующую идею?

Nexus 04.07.2018 09:16

Это не массив, но коллекция.
У коллекции есть свойство length, нужно обращаться не к элементу коллекции, а к самой коллекции: images.length

Стоит отметить, что чем меньше циклов вы используете, тем быстрее будет ваш код исполняться.
Что вам мешает выполнить все манипуляции над элементами в единственном цикле?
Для более удобного перебора элементов коллекции её можно привести к массиву и воспользоваться одним из перебирающих методов.
Коллекцию к массиву можно привести так:
const imagesArray=[].slice.call(images);

ksa 04.07.2018 09:41

Цитата:

Сообщение от s24344
У меня есть набор dom элементов, которые я получил выборкой:
let images = document.querySelectorAll('.elem)


затем через цикл и условие я отфильтровал лишь нужные мне элементы (в данном случае я вывел те элементы, у которых нет атрибута id):

Дык!

images = document.querySelectorAll('.elem:not([id])');

s24344 04.07.2018 09:57

Спасибо, ребята. Что касается советов, то я прислушаюсь, так ка ни в коем случае не претендую на то, что мои решения единственно верные )


Часовой пояс GMT +3, время: 09:56.