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

Пробую задать аттрибут "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

0
Автор поста оценил этот комментарий
До тебя по-любому эту задачку кто-то уже решал же, значит на stackoverflow пример будет, тока вопрос сформулируй на английском
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Ну, такое себе....
Понятно, что с помощью этого поста я получу (нет) готовое решение в стиле stackoverflow. но там тоже много готовых решений не моих задачек.

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

с такими вопросами лучше в чаты телеги по жс

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

А тут лучше видно.

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

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

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

показать ответы
0
Автор поста оценил этот комментарий
А зачем i++ ? Бессмыслица право слово
раскрыть ветку (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
Автор поста оценил этот комментарий

Работает

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

document.querySelectorAll(".nav__item").forEach(function(val, i) {

val.setAttribute("id", i);

val.innerText = i;

i++;

});

Действительно работает, если но если селектор Class указывать с точкой в начале.
С утра проглядел точку.
Спасибо!.
1
Автор поста оценил этот комментарий

Через document.querySelectorAll('.nav__item').forEach( ... ) должно работать.

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

querySelectorAll
Это nodelist - его тоже нужно сначала преобразовать в массив (вектор)
Тут кривой-косой перевод:
https://coderoad.ru/13433799/Почему-в-nodelist-нет-forEach

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

Через document.querySelectorAll('.nav__item').forEach( ... ) должно работать.

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

nein!
Нет, так не работает. Увы.
Вот так работает:

Array.from(document.getElementsByClassName("nav__item")).forEach(function(val, i) {

val.setAttribute("id", i);

val.innerText = i;

i++;

});

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

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

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

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

раскрыть ветку (1)
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++;

});

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

Подожду еще троллинга...

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

Увы, не случилось.

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

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


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

или

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

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

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

показать ответы
0
Автор поста оценил этот комментарий
Да, наверное. Но тут шанс сильно меньше, там хотя бы тематический форум
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Ох уж эти мне тематические форумы:

— Здравствуйте, это канал об аниме?
— Да.
— Как мне пропатчить KDE2 под FreeBSD?

0
Автор поста оценил этот комментарий
Сосед, кстати, тоже stackoverflow не любил
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

А что stackoverflow?

показать ответы
0
DELETED
Автор поста оценил этот комментарий
Друг, пятница, 23:45, ну ты чего?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

И чо? Должен знать какой-то прикол про пятницу 23:45? Не в курсе прост.

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

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

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

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

показать ответы

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества