Дурацкий пример

Пробую задать аттрибут "id" элементам, каждому id присвоить номер "i", методом forEach.
очевидно, где-то не догоняю.

Вот код с циклом while:

//перменная с массивом
let NavIdS = document.getElementsByClassName("nav__item");

//функция с перебором по длине массива, присвоением аттрибута, записью инфы в значение аттрибута.

NavIdSEach = () => {

let i = 0;

while (i < NavIdS.length) {

NavIdS[i].setAttribute("id", i);

NavIdS[i].innerText = i;

i++;

}};
//вызов функции

NavIdSEach();
---------
Как добиться этого же но только через использование forEach?

Web-технологии

535 постов5.8K подписчиков

Правила сообщества

1. Не оскорблять других пользователей

2. Не пытаться продвигать свои услуги под видом тематических постов

3. Не заниматься рекламой

4. Никакой табличной верстки

5. Тег сообщества(не обязателен) pikaweb

Вы смотрите срез комментариев. Показать все
4
Автор поста оценил этот комментарий

Так getElementsByClassName возвращает коллекцию элементов, а foreach вроде как только с масивами работает

раскрыть ветку (16)
0
Автор поста оценил этот комментарий
Так getElementsByClassName возвращает коллекцию элементов

Не просто коллекцию, а «живую» коллекцию.

0
Автор поста оценил этот комментарий

А это "коллекция" - не массив?
while - тоже перебирает эелементы массива, где каждый элемент это коллекция.

раскрыть ветку (14)
1
Автор поста оценил этот комментарий
Нет, while просто перебирает все элементы, как и for, а вот forEach это метод, который применяется к объекту типа массив
1
Автор поста оценил этот комментарий

var list = Array.from(NavIdS); - в массив


list.foreach( function(val){ console.log(val)} );

или

list.forEach(function(val){var i = 0; val.setAttribute("id",++i); } );

раскрыть ветку (11)
0
Автор поста оценил этот комментарий

Спасибо!
Преобразование именно в массив помогло.
Атрибут добавляется, но счётчик не работает.
Вероятно, раз нету принудительного преребора в цикле, то и не будет.

раскрыть ветку (10)
1
Автор поста оценил этот комментарий
.forEach((val, i) => { //ваш код. Метод forEach из коробки передает вторым аргументом позтцию элемента в массиве
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да, спасибо, индекс в аргументах помог.

0
Автор поста оценил этот комментарий

Счетчик не работает потому, что я какого-то указал var i = 0 внутри forEach, а должен быть снаружи в начале (последствия пятницы 23:45).


i - как аргумент возращает позицию 0...n, но если нужен будет другой i (x..y), тогда вначале i=x, затем forEach, а уже в forEach ++i;

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
последствия пятницы 23:45

)))

0
Автор поста оценил этот комментарий
Получилось так:

let NavIdS = document.getElementsByClassName("nav__item");

let arr = Array.from(NavIdS);

arr.forEach(function(val, i) {

/* var i = 0; */ // по умолчанию есть нулевой индекс, если он указан в аргументах функции.

val.setAttribute("id", i);

i++;

});

раскрыть ветку (5)
0
Автор поста оценил этот комментарий
А зачем i++ ? Бессмыслица право слово
раскрыть ветку (4)
0
Автор поста оценил этот комментарий

Действительно, не нужно.

раскрыть ветку (3)
0
Автор поста оценил этот комментарий
И про var забудь навсегда. Тут кто-то из олдскулов тебе из 19 века написал пример с var, но только const, в крайнем случае let - когда без изменений не обойтись.
раскрыть ветку (2)
0
Автор поста оценил этот комментарий

var забудь навсегда

А чо так? Не кошерно?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Не кошерно. У var, например, функциональная область видимости и возможность использования до инициализации. Почти все старые задачки на собеседованиях по JS основаны на сложности предсказания значений var в том или ином месте кода.
Давным давно уже var запрещён по всем бест практис и если на проекте есть линтер, в нем 100% будет запрет на var.
Короче var ненадежный пассажир. В es6 добавлены let и const, ими и рекомендуется пользоваться, причём лучше const, а let только если нельзя избежать переприсваивания.
0
Автор поста оценил этот комментарий
А это "коллекция" - не массив?

Вы документацию читать пробовали? Попробуйте в коллекцию push/pop сделать.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества